Post Reply 
'91 TDS 256KB RAM Card for the HP-48 SX
03-19-2015, 04:59 AM
Post: #1
'91 TDS 256KB RAM Card for the HP-48 SX
Hi,
I have recently aquired a TDS 256KB RAM card for the HP-48 SX. Unfortunately I cannot find any means to use it since I imagine that I need a bank switch (have never used such program). The SuperSwitch on site hpcalc.org states that it can be used with the GX-model that was introduced in 1993. Documentation in french that I do not master...

Can someone please clarify the situation?

TIA,
Matti/Sweden

Super SWITCH for 48GX
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
********************
* Switch une carte *
* en port 1 ou 2 ! *
* Utilisable en *
* port 1 ou 2 *
********************


+---------------+
| DOCUMENTATION |
+---------------+

Préliminaire
¯¯¯¯¯¯¯¯¯¯¯¯¯
Il faut stocker sur
chaque banc la variable
BANK de la forme x.y
x  numéro du banc
y  nb total de bancs

Exemple :
1.4 :1:BANK STO
{Pour une carte 512Ko}
{Configurée en banc 1}

SW: (Aucune entrée)
¯¯
Utilitaire donnant le
numéro du banc selectionné
en Inversion Video et
les bancs disponibles
et switchables
ainsi que la position
de la protection en
écriture.Pour les 2
ports.


BS1: (numéro du banc)
¯¯¯
Switch la carte en port
1 sur le banc demandé


BS2: (numéro du banc)
¯¯¯
Switch la carte en port
2 sur le banc demandé
Find all posts by this user
Quote this message in a reply
03-19-2015, 01:15 PM
Post: #2
RE: '91 TDS 256KB RAM Card for the HP-48 SX
(03-19-2015 04:59 AM)MattiMark Wrote:  Hi,
I have recently aquired a TDS 256KB RAM card for the HP-48 SX. Unfortunately I cannot find any means to use it since I imagine that I need a bank switch (have never used such program). The SuperSwitch on site hpcalc.org states that it can be used with the GX-model that was introduced in 1993. Documentation in french that I do not master...

Can someone please clarify the situation?

TIA,
Matti/Sweden

I did not think a 48SX could use a card above 128KB, but perhaps the TDS card was special. On a GX, cards larger than 128KB are seen as having additional ports, each 128KB in size, so this card may look like ports :2 and :3 if installed in physical port-2. So maybe it's all thee, but you just didn't see it there?

--Bob Prosperi
Find all posts by this user
Quote this message in a reply
03-19-2015, 01:55 PM
Post: #3
RE: '91 TDS 256KB RAM Card for the HP-48 SX
It was discussed here recently.

HTH Günter
Find all posts by this user
Quote this message in a reply
03-19-2015, 08:00 PM
Post: #4
RE: '91 TDS 256KB RAM Card for the HP-48 SX
From my knowledge of the HP48 hardware, it's not possible to switch the banks of a RAM card > 128KB under software control with a HP48SX.

Only a HP48GX has a bank switcher logic for card slot 2, and only for the slot 2. This hardware logic adds 5 additional address lines for max. 2^5 = 32 banks. Slot 1 of the GX can only handle a 128KB RAM card like the SX.

So if somebody know, how this super duper 256KB RAM card is able to switch his banks under software control in a SX, please tell me. I'll try to implement this immediately into Emu48. ;-)

Christoph
Visit this user's website Find all posts by this user
Quote this message in a reply
03-19-2015, 08:16 PM
Post: #5
RE: '91 TDS 256KB RAM Card for the HP-48 SX
(03-19-2015 08:00 PM)Christoph Giesselink Wrote:  From my knowledge of the HP48 hardware, it's not possible to switch the banks of a RAM card > 128KB under software control with a HP48SX.

Only a HP48GX has a bank switcher logic for card slot 2, and only for the slot 2. This hardware logic adds 5 additional address lines for max. 2^5 = 32 banks. Slot 1 of the GX can only handle a 128KB RAM card like the SX.

So if somebody know, how this super duper 256KB RAM card is able to switch his banks under software control in a SX, please tell me. I'll try to implement this immediately into Emu48. ;-)

Christoph

Moin Christoph,

I can't tell of course. But the discussion here sounds like it is possible?

Günter
Find all posts by this user
Quote this message in a reply
03-19-2015, 11:39 PM
Post: #6
RE: '91 TDS 256KB RAM Card for the HP-48 SX
(03-19-2015 08:16 PM)Guenter Schink Wrote:  I can't tell of course. But the discussion here sounds like it is possible?

Just got a report, these cards really exist for the SX and it seem that the bank switching was activated by a special read sequence. This version of Super Switch can definitely handle cards for the GX. I had a short look inside the decompiled source code and found a code sequence typically for accessing a memory card inside slot 2 of a GX (conditional UNCFG the module at address #C0000, normally a card in slot 1, to get access to the covered memory below, in our case to the card in slot 2). This code sequence makes no sense on a SX, because there's no covered memory at #C0000.

Christoph
Visit this user's website Find all posts by this user
Quote this message in a reply
03-19-2015, 11:46 PM
Post: #7
RE: '91 TDS 256KB RAM Card for the HP-48 SX
I'm not familiar with this particular RAM card, but bankswitching under software control does not seem to be that difficult.

If the calculator can address only 128 KB, the card itself (and not the calculator, as in the 48GX) will have to contain the bankswitching logic. While bankswitching is typically accomplished through I/O ports, it can also be done through memory-mapped I/O.

At the minimum, all you need is a single latch to switch the RAM's A17 address line. If this is 0, the calculator will see the card's first 128 KB, if it's 1, the second 128 KB bank (and so on for larger cards). If you then add an address decoder to map this latch into the calculator's address room as bit 0 at address 1FFFFh (or something similar) overriding the actual RAM contents at this address, you can write a small program to set or clear this bit in order to switch RAM banks under software control.

Of course, it might be wise to add some "locking" logic to make it more difficult to flip RAM banks in order to avoid accidental bank switches in the case of a program running wild. This logic would disable the switching logic unless a specific 8-bit value is written to the address, or until a certain sequence of "magic" values is written to the same address, or a certain access pattern is recognized (for example, three successive reads of the same address).

If the RAM to be paged in or out is used for storage only (like a RAM disk), the bank-switching program should ensure that all files are closed on the corresponding volume, dirty data written out and all cached contents in the filesystem layer invalided before actually switching banks. Basically, the volume needs to be unmounted and remounted.

If, however, the RAM is part of the device's operational memory, the device would most certainly crash when switching banks. In this case, it might be possible to delay the requested page switch until the next power sequence or reboot. Alternatively, if a certain system state needs to be preserved through bank switches, the switching program might copy the vital data from one page to the other within a mutex. Or a more sophisticated switching logic would allow to map in and out sub-pages under software control. There are various ways how to accomplish this...

Greetings,

Matthias


--
"Programs are poems for computers."
Find all posts by this user
Quote this message in a reply
03-21-2015, 06:06 PM
Post: #8
RE: '91 TDS 256KB RAM Card for the HP-48 SX
(03-19-2015 11:39 PM)Christoph Giesselink Wrote:  
(03-19-2015 08:16 PM)Guenter Schink Wrote:  I can't tell of course. But the discussion here sounds like it is possible?

Just got a report, these cards really exist for the SX and it seem that the bank switching was activated by a special read sequence. This version of Super Switch can definitely handle cards for the GX. I had a short look inside the decompiled source code and found a code sequence typically for accessing a memory card inside slot 2 of a GX (conditional UNCFG the module at address #C0000, normally a card in slot 1, to get access to the covered memory below, in our case to the card in slot 2). This code sequence makes no sense on a SX, because there's no covered memory at #C0000.

Christoph

If you look a further down in the disassembly of the directory, it says that it's for the HP48GX. Or just open the DOC804 variable :-)

I have always wondered if these cards had extra hardware to handle the bank switching since the HP48SX itself doesn't have any bank switching mechanism built into its hardware. I have never owned such a card, nor would I open one up if I did just to see.

Graph 3D | QPI | SolveSys
Find all posts by this user
Quote this message in a reply
03-22-2015, 04:55 PM
Post: #9
RE: '91 TDS 256KB RAM Card for the HP-48 SX
Thanks all for digging into the subject.

I inserted the TDS 256-card into a 48 GX port 2 and after PINIT it shows as port 2.
After initiating the card for two banks with 1.2:x:BANK STO (x = port 2) I can now run SW which displays two ports, of which bank BK1 is highlighted. However, when I try to switch to bank 2 I get a warmstart...

Any clues of how to proceed?

/Matti
Find all posts by this user
Quote this message in a reply
03-22-2015, 06:48 PM
Post: #10
RE: '91 TDS 256KB RAM Card for the HP-48 SX
(03-22-2015 04:55 PM)MattiMark Wrote:  Any clues of how to proceed?

/Matti

press [L-shift] [2], then [Ports] to see the installed ports. You will see :0:, :1:, and :2:, and possibly :3: if the 2nd 128KB bank is mapped into the 'normal' port addressing scheme. If so, you just access items with the normal :3:ITEM syntax to STO/RCL, etc. If not, and I'm guessing this is the case, then this TDS card implements some non-standard bank access scheme, which I can't help with.

--Bob Prosperi
Find all posts by this user
Quote this message in a reply
03-22-2015, 08:01 PM
Post: #11
RE: '91 TDS 256KB RAM Card for the HP-48 SX
rprosperi,

I did that (unfortunately forgot to mention it, sorry) but I only saw ports :0: and :2:, or :0: and :1: using the two differet possibilities to inser the card.

Now, any clues?

/Matti
Find all posts by this user
Quote this message in a reply
03-22-2015, 08:40 PM (This post was last modified: 03-22-2015 11:34 PM by Han.)
Post: #12
RE: '91 TDS 256KB RAM Card for the HP-48 SX
You should try using it in card slot 1, and not 2. Card slot 2 has its own bankswitcher built into the hardware. That's probably why you got a warmstart (and likey WSLOG shows a module pulled message). Card slot 1 is identical to both card slots on the HP48SX, whereas card slot 2 is not.

Graph 3D | QPI | SolveSys
Find all posts by this user
Quote this message in a reply
03-22-2015, 08:54 PM
Post: #13
RE: '91 TDS 256KB RAM Card for the HP-48 SX
(03-22-2015 08:40 PM)Han Wrote:  You should try using it in card slot 1, and not 2. Card slot 2 has its own bankswitcher built into the hardware. That's probably why you got a warmstart (and likey WSLOG shows a module pulled message). Card slot 1 is identical to both card slots on the HP48SX, whereas card slot 2 is not.

Good call, an important distinction. And if it works in a GX/Port-1, it could possibly work the same in an SX, unless it uses some of the GX extensions (implied by the items found in the disassembly), but seems unlikely if it was marketed as also working with the SX as described in the mktg blurb quoted above. It's possible that the latest version of Super Switch only supported the GX since most users, likely to need such a card, probably had switched to GX machines.

--Bob Prosperi
Find all posts by this user
Quote this message in a reply
03-22-2015, 11:22 PM
Post: #14
RE: '91 TDS 256KB RAM Card for the HP-48 SX
Here's a disassembly of Super Switcher:

Code:
*******************************************************************************
ASSEMBLE
    ABS    C0000
RPL
*******************************************************************************
LOCALLABEL L_C0000
ASSEMBLE
      CON(5)  =DORRP
      CON(3)  #302
      REL(5)  L_C1149
*******************************************************************************
      CON(5)  0
L_C0012
      CON(2)  6
      NIBASC  'LIB804'
      CON(2)  6
RPL
  xTITLE HP.SW\20:Super\20SWITCH
  xROMID   324  ( %804 )
  xCONFIG  LibCfg324
*******************************************************************************
* ROMPTR table
*******************************************************************************
EXTERNAL xABOUT\B1\B1804    ( ROMPTR 324 0    at C0074 )
EXTERNAL xSW        ( ROMPTR 324 1    at C016D )
EXTERNAL xBS1        ( ROMPTR 324 2    at C043D )
EXTERNAL xBS2        ( ROMPTR 324 3    at C04E3 )
EXTERNAL XLIB_324_4    ( ROMPTR 324 4    at C0582 )
EXTERNAL XLIB_324_5    ( ROMPTR 324 5    at C06C1 )
EXTERNAL XLIB_324_6    ( ROMPTR 324 6    at C06DB )
EXTERNAL XLIB_324_7    ( ROMPTR 324 7    at C06F5 )
EXTERNAL XLIB_324_8    ( ROMPTR 324 8    at C0750 )
EXTERNAL XLIB_324_9    ( ROMPTR 324 9    at C07AB )
EXTERNAL XLIB_324_A    ( ROMPTR 324 A    at C0838 )
EXTERNAL XLIB_324_B    ( ROMPTR 324 B    at C08C2 )
EXTERNAL XLIB_324_C    ( ROMPTR 324 C    at C0904 )
EXTERNAL XLIB_324_D    ( ROMPTR 324 D    at C096E )
EXTERNAL XLIB_324_E    ( ROMPTR 324 E    at C0BE8 )
EXTERNAL XLIB_324_F    ( ROMPTR 324 F    at C0EBC )
*******************************************************************************
*******************************************************************************
ASSEMBLE
      CON(1)  #8
RPL
*******************************************************************************
xNAME ABOUT\B1\B1804
::
  TURNMENUOFF
ASSEMBLE
      CON(5)  =DOCSTR
      REL(5)  L_C0148
      NIBASC  'Super SWITCH for 48GX\n'
      NIBASC  '      \n'
      NIBASC  '            by HPnuts\n'
      NIBASC  '            &  HPdark\n'
      NIBASC  '\n'
      NIBASC  '\A9Copyright  04/12/1993'
L_C0148
RPL
  THREE EIGHT Disp5x7 %6 Ck&Freeze
;
*******************************************************************************
ASSEMBLE
    CON(1)  #8
RPL
*******************************************************************************
xNAME SW
::
  0LastRomWrd! XLIB_324_7 ITE
  ::
    {
      $ "EXIT"
      ::
        ::
          %0 xMENU
        ;
      ;
    }
    %1 XLIB_324_F 3PICK %FP % 4E-1 %= ITE
    ::
      XLIB_324_5 XYZW>YZWX %IP %1 XLIB_324_E %2
      XLIB_324_E %3 XLIB_324_E %4 XLIB_324_E
    ;
    ::
      {
      }
      DUP XLIB_324_5 SIXROLL %IP %1 XLIB_324_E %2
      XLIB_324_E
    ;
    2DROP SIX {}N
  ;
  {
  }
  XLIB_324_8 ITE
  ::
    {
      $ "EXIT"
      ::
        ::
          %0 xMENU
        ;
      ;
    }
    %2 XLIB_324_F 3PICK %FP % 4E-1 %= ITE
    ::
      XLIB_324_6 XYZW>YZWX %IP %1 XLIB_324_E %2
      XLIB_324_E %3 XLIB_324_E %4 XLIB_324_E
    ;
    ::
      {
      }
      DUP XLIB_324_6 SIXROLL %IP %1 XLIB_324_E %2
      XLIB_324_E
    ;
    2DROP SIX {}N
  ;
  {
  }
  &COMP TOTEMPOB NotList?Err InitMenu
;
*******************************************************************************
ASSEMBLE
    CON(1)  #8
RPL
*******************************************************************************
xNAME BS1
::
  %1 SWAP XLIB_324_D xABOUT\B1\B1804 XY>Y DATE TOD
  % 1E-4 %HMS+ ' PURGALARM%
  XYZW>YZWX XLIB_324_5 ' DOAPWL
  FOUR # 2D9D COMPN TOTEMPOB THREE{}N STOALM{} DROP
;
*******************************************************************************
ASSEMBLE
    CON(1)  #8
RPL
*******************************************************************************
xNAME BS2
::
  %2 SWAP XLIB_324_D xABOUT\B1\B1804 XY>Y DATE TOD
  % 1E-4 %HMS+ ' PURGALARM%
  XYZW>YZWX XLIB_324_6 ' DOAPWL
  FOUR # 2D9D COMPN TOTEMPOB THREE{}N STOALM{} DROP
;
*******************************************************************************
NULLNAME XLIB_324_4
::
  XLIB_324_9 SWAP XYZW>YZWX 2DROP AND SWAP TWO #= AND ITE
  ONE
  ZERO
  '
  ::
    CODE
          GOSBVL  =SAVPTR
          A=DAT1  A
          D1=D1+  5
          D0=A
          D0=D0+  5
          C=DAT0  B
          D=C     B
          C=C-1   B
          GOC     L_C0606
          LC(5)   L_C0000
          UNCNFG
L_C0606
          A=DAT1  A
          D0=A
          D0=D0+  5
          GOSUB   L_C063B
          NIBHEX  0EEECECC01
          NIBHEX  0EEECECE03
          NIBHEX  0EEECEEEC0
          NIBHEX  0EEECEEC07
L_C063B
          C=RSTK
          A=DAT0  B
          A=A-1   B
          D1=C
          A=A-1   B
          GOC     L_C0655
L_C064C
          D1=D1+  10
          A=A-1   B
          GONC    L_C064C
L_C0655
          LC(2)   #A
          B=C     B
          LC(5)   #FFFFA
          D0=C
L_C0666
          A=DAT1  A
          C=A     P
          D0=C
          A=DAT0  B
          D1=D1+  1
          B=B-1   B
          GONC    L_C0666
          D=D-1   B
          GOC     L_C068B
          LC(5)   L_C0000
          CONFIG
L_C068B
          GOSBVL  =GETPTR
          D=D+1   A
          D1=D1+  5
          GOVLNG  =DropLoop
    ENDCODE
  ;
  TWO # 2D9D COMPN TOTEMPOB
;
*******************************************************************************
NULLNAME XLIB_324_5
::
  ONE XLIB_324_4
;
*******************************************************************************
NULLNAME XLIB_324_6
::
  TWO XLIB_324_4
;
*******************************************************************************
NULLNAME XLIB_324_7
::
  XLIB_324_A ROT 2DROP ITE
  ::
    ' TAG 1
    ID BANK XLIB_324_C
  ;
  FALSE
;
*******************************************************************************
NULLNAME XLIB_324_8
::
  XLIB_324_A XYZ>ZXY 2DROP ITE
  ::
    ' TAG 2
    ID BANK XLIB_324_C
  ;
  FALSE
;
*******************************************************************************
  NULLNAME XLIB_324_9
  CODE
        AD0EX
        R0=A
        D0=(5)  =CARDSTAT
        A=DAT0  B
        D=D-1   A
        D1=D1-  5
        LC(5)   =TRUE
        ?ABIT=1 2
        GOYES   L_C07DD
        LC(3)   #AC0
L_C07DD
        DAT1=C  A
        D1=D1-  5
        D=D-1   A
        LC(3)   #A81
        ?ABIT=1 0
        GOYES   L_C07F6
        LC(3)   #AC0
L_C07F6
        DAT1=C  A
        D1=D1-  5
        D=D-1   A
        LC(3)   #A81
        ?ABIT=1 3
        GOYES   L_C080F
        LC(3)   #AC0
L_C080F
        DAT1=C  A
        D1=D1-  5
        D=D-1   A
        LC(3)   #A81
        ?ABIT=1 1
        GOYES   L_C0828
        LC(3)   #AC0
L_C0828
        DAT1=C  A
        A=R0
        D0=A
        GOVLNG  (=GETPTRLOOP)+6
  ENDCODE
*******************************************************************************
  NULLNAME XLIB_324_A
  CODE
        AD0EX
        R0=A
        D0=(5)  (=CONFTAB)+4
        A=DAT0  B
        D=D-1   A
        D1=D1-  5
        LC(5)   =TRUE
        ?ABIT=1 1
        GOYES   L_C086A
        LC(3)   #AC0
L_C086A
        DAT1=C  A
        D1=D1-  5
        D=D-1   A
        D0=D0+  1
        C=A     B
        A=DAT0  B
        C=C+A   B
        A=A&C   B
        LC(3)   #A81
        ?ABIT=1 1
        GOYES   L_C0893
        LC(3)   #AC0
L_C0893
        DAT1=C  A
        D1=D1-  5
        D=D-1   A
        D0=D0+  2
        A=DAT0  B
        LC(3)   #A81
        ?ABIT=1 1
        GOYES   L_C08B2
        LC(3)   #AC0
L_C08B2
        DAT1=C  A
        A=R0
        D0=A
        GOVLNG  (=GETPTRLOOP)+6
  ENDCODE
*******************************************************************************
NULLNAME XLIB_324_B
::
  XLIB_324_9 FIVEROLL %1 %= IT
  ::
    SWAP XYZW>WXYZ
  ;
  XYZ>
;
*******************************************************************************
NULLNAME XLIB_324_C
::
  xIFERR
    ::
      xEVAL TRUE
    ;
  xERRTHEN
    ::
      xIF
        % -5.5E1 xFC?
      xTHEN
        xDROP
      xIFEND
      FALSE
    ;
  xIFEND
;
*******************************************************************************
NULLNAME XLIB_324_D
::
  0LastRomWrd!
  CK2
  DUPTYPEREAL? NcaseTYPEERR
  SWAP DUPTYPEREAL? NcaseTYPEERR
  COERCE2 SWAP DUP ONE #< OVER FOUR #> OR IT
  ::
    2DROP $ "Error:\nBad Bank Number" xEXIT
  ;
  SWAP DUP ONE #< OVER TWO #> OR IT
  ::
    2DROP $ "Error:\nBad Port Number" xEXIT
  ;
  XLIB_324_A 4PICK TWO #= ITE
  ::
    ITE
    2DROP
    ::
      XYZW> $ "Error:\nNo Switch Card in :2:" xEXIT
    ;
  ;
  ::
    DROP ITE
    DROP
    ::
      ITE
      ::
        2DROP $ "Error:\nCard Merge in :1:" xEXIT
      ;
      ::
        2DROP $ "Error:\nNo Switch Card in :1:" xEXIT
      ;
    ;
  ;
  SWAP
;
*******************************************************************************
NULLNAME XLIB_324_E
::
  2DUP %= ITE
  ::
    {
ASSEMBLE
          CON(5)  =DOGROB
          REL(5)  L_C0C4A
          CON(5)  #8
          CON(5)  #15
          NIBHEX  FFFFF1
          NIBHEX  100001
          NIBHEX  D42011
          NIBHEX  551811
          NIBHEX  DC0011
          NIBHEX  551011
          NIBHEX  D4AB31
          NIBHEX  100001
* |*********************   | *
* |*                   *   | *
* |* **  *  *      *   *   | *
* |* * * * *      **   *   | *
* |* **  **        *   *   | *
* |* * * * *       *   *   | *
* |* **  *  * *** ***  *   | *
* |*                   *   | *
L_C0C4A
          CON(5)  =DOGROB
          REL(5)  L_C0C8E
          CON(5)  #8
          CON(5)  #15
          NIBHEX  FFFFF1
          NIBHEX  100001
          NIBHEX  D42831
          NIBHEX  551021
          NIBHEX  DC0831
          NIBHEX  551801
          NIBHEX  D4AB31
          NIBHEX  100001
* |*********************   | *
* |*                   *   | *
* |* **  *  *     ***  *   | *
* |* * * * *        *  *   | *
* |* **  **       ***  *   | *
* |* * * * *      *    *   | *
* |* **  *  * *** ***  *   | *
* |*                   *   | *
L_C0C8E
          CON(5)  =DOGROB
          REL(5)  L_C0CD2
          CON(5)  #8
          CON(5)  #15
          NIBHEX  FFFFF1
          NIBHEX  100001
          NIBHEX  D42831
          NIBHEX  551021
          NIBHEX  DC0031
          NIBHEX  551021
          NIBHEX  D4AB31
          NIBHEX  100001
* |*********************   | *
* |*                   *   | *
* |* **  *  *     ***  *   | *
* |* * * * *        *  *   | *
* |* **  **        **  *   | *
* |* * * * *        *  *   | *
* |* **  *  * *** ***  *   | *
* |*                   *   | *
L_C0CD2
          CON(5)  =DOGROB
          REL(5)  L_C0D16
          CON(5)  #8
          CON(5)  #15
          NIBHEX  FFFFF1
          NIBHEX  100001
          NIBHEX  D42021
          NIBHEX  551031
          NIBHEX  DC0821
          NIBHEX  551871
          NIBHEX  D4A321
          NIBHEX  100001
* |*********************   | *
* |*                   *   | *
* |* **  *  *       *  *   | *
* |* * * * *       **  *   | *
* |* **  **       * *  *   | *
* |* * * * *      **** *   | *
* |* **  *  * ***   *  *   | *
* |*                   *   | *
L_C0D16
RPL
    }
    SWAP COERCE NTHELCOMP DROP ' TakeOver
    TWO{}N
  ;
  ::
    {
ASSEMBLE
          CON(5)  =DOGROB
          REL(5)  L_C0D91
          CON(5)  #8
          CON(5)  #15
          NIBHEX  000000
          NIBHEX  FFFFF1
          NIBHEX  3BDFE1
          NIBHEX  BAE7E1
          NIBHEX  33FFE1
          NIBHEX  BAEFE1
          NIBHEX  3B54C1
          NIBHEX  FFFFF1
* |                        | *
* |*********************   | *
* |**  ** ** ****** ****   | *
* |** * * * ******  ****   | *
* |**  **  ******** ****   | *
* |** * * * ******* ****   | *
* |**  ** ** *   *   ***   | *
* |*********************   | *
L_C0D91
          CON(5)  =DOGROB
          REL(5)  L_C0DD5
          CON(5)  #8
          CON(5)  #15
          NIBHEX  000000
          NIBHEX  FFFFF1
          NIBHEX  3BD7C1
          NIBHEX  BAEFD1
          NIBHEX  33F7C1
          NIBHEX  BAE7F1
          NIBHEX  3B54C1
          NIBHEX  FFFFF1
* |                        | *
* |*********************   | *
* |**  ** ** *****   ***   | *
* |** * * * ******** ***   | *
* |**  **  *******   ***   | *
* |** * * * ****** *****   | *
* |**  ** ** *   *   ***   | *
* |*********************   | *
L_C0DD5
          CON(5)  =DOGROB
          REL(5)  L_C0E19
          CON(5)  #8
          CON(5)  #15
          NIBHEX  000000
          NIBHEX  FFFFF1
          NIBHEX  3BD7C1
          NIBHEX  BAEFD1
          NIBHEX  33FFC1
          NIBHEX  BAEFD1
          NIBHEX  3B54C1
          NIBHEX  FFFFF1
* |                        | *
* |*********************   | *
* |**  ** ** *****   ***   | *
* |** * * * ******** ***   | *
* |**  **  ********  ***   | *
* |** * * * ******** ***   | *
* |**  ** ** *   *   ***   | *
* |*********************   | *
L_C0E19
          CON(5)  =DOGROB
          REL(5)  L_C0E5D
          CON(5)  #8
          CON(5)  #15
          NIBHEX  000000
          NIBHEX  FFFFF1
          NIBHEX  3BDFD1
          NIBHEX  BAEFC1
          NIBHEX  33F7D1
          NIBHEX  BAE781
          NIBHEX  3B5CD1
          NIBHEX  FFFFF1
* |                        | *
* |*********************   | *
* |**  ** ** ******* ***   | *
* |** * * * *******  ***   | *
* |**  **  ******* * ***   | *
* |** * * * ******    **   | *
* |**  ** ** *   *** ***   | *
* |*********************   | *
L_C0E5D
RPL
    }
    OVER COERCE NTHELCOMP DROP SWAP COERCE 4PICK ' DOAPWL
    THREE # 2D9D COMPN TOTEMPOB TWO{}N
  ;
  XYZ>ZXY
;
*******************************************************************************
NULLNAME XLIB_324_F
::
  DUP XLIB_324_B SWAP %2 %= ITE
  ::
    ITE
ASSEMBLE
        CON(5)  =DOGROB
        REL(5)  L_C0F33
        CON(5)  #8
        CON(5)  #15
        NIBHEX  000000
        NIBHEX  300081
        NIBHEX  11E011
        NIBHEX  968C31
        NIBHEX  54EC71
        NIBHEX  962C31
        NIBHEX  11E011
        NIBHEX  300081
* |                        | *
* |**                 **   | *
* |*   *    ***    *   *   | *
* |*  * **    *  ****  *   | *
* |* *   *  ***  ***** *   | *
* |*  * **  *    ****  *   | *
* |*   *    ***    *   *   | *
* |**                 **   | *
L_C0F33
        CON(5)  =DOGROB
        REL(5)  L_C0F77
        CON(5)  #8
        CON(5)  #15
        NIBHEX  000000
        NIBHEX  300081
        NIBHEX  10E011
        NIBHEX  108C31
        NIBHEX  10EC71
        NIBHEX  102C31
        NIBHEX  10E011
        NIBHEX  300081
* |                        | *
* |**                 **   | *
* |*        ***    *   *   | *
* |*          *  ****  *   | *
* |*        ***  ***** *   | *
* |*        *    ****  *   | *
* |*        ***    *   *   | *
* |**                 **   | *
L_C0F77
RPL
  ;
  ::
    ITE
ASSEMBLE
        CON(5)  =DOGROB
        REL(5)  L_C0FCA
        CON(5)  #8
        CON(5)  #15
        NIBHEX  000000
        NIBHEX  300081
        NIBHEX  114011
        NIBHEX  966C31
        NIBHEX  544C71
        NIBHEX  964C31
        NIBHEX  11E011
        NIBHEX  300081
* |                        | *
* |**                 **   | *
* |*   *     *     *   *   | *
* |*  * **  **   ****  *   | *
* |* *   *   *   ***** *   | *
* |*  * **   *   ****  *   | *
* |*   *    ***    *   *   | *
* |**                 **   | *
L_C0FCA
        CON(5)  =DOGROB
        REL(5)  L_C100E
        CON(5)  #8
        CON(5)  #15
        NIBHEX  000000
        NIBHEX  300081
        NIBHEX  104011
        NIBHEX  106C31
        NIBHEX  104C71
        NIBHEX  104C31
        NIBHEX  10E011
        NIBHEX  300081
* |                        | *
* |**                 **   | *
* |*         *     *   *   | *
* |*        **   ****  *   | *
* |*         *   ***** *   | *
* |*         *   ****  *   | *
* |*        ***    *   *   | *
* |**                 **   | *
L_C100E
RPL
  ;
  ONE {}N
;
LOCALLABEL LibCfg324
::
  # 324 TOSRRP
;
*******************************************************************************
LOCALLABEL LibEnd324
ASSEMBLE
    CON(5)  (*)-L_C0012
L_C1149
    CON(2)  6
    NIBASC  'DOC804'
    CON(2)  6
      CON(5)  =DOCSTR
      REL(5)  L_C1797
      NIBASC  'Super SWITCH for 48GX\n'
      NIBASC  '\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\n'
      NIBASC  ' ********************\n'
      NIBASC  ' * Switch une carte *\n'
      NIBASC  ' * en port 1 ou 2 ! *\n'
      NIBASC  ' *  Utilisable en   *\n'
      NIBASC  ' *  port 1 ou 2     *\n'
      NIBASC  ' ********************\n'
      NIBASC  '\n'
      NIBASC  '\n'
      NIBASC  '  +---------------+\n'
      NIBASC  '  | DOCUMENTATION |\n'
      NIBASC  '  +---------------+\n'
      NIBASC  '\n'
      NIBASC  'Pr\E9liminaire\n'
      NIBASC  '\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\AF\n'
      NIBASC  'Il faut stocker sur\n'
      NIBASC  'chaque banc la variable\n'
      NIBASC  'BANK de la forme x.y\n'
      NIBASC  'x \8D num\E9ro du banc\n'
      NIBASC  'y \8D nb total de bancs\n'
      NIBASC  '\n'
      NIBASC  'Exemple :\n'
      NIBASC  '1.4 :1:BANK STO\n'
      NIBASC  '{Pour une carte 512Ko}\n'
      NIBASC  '{Configur\E9e en banc 1}\n'
      NIBASC  '\n'
      NIBASC  'SW: (Aucune entr\E9e)\n'
      NIBASC  '\AF\AF\n'
      NIBASC  'Utilitaire donnant le\n'
      NIBASC  'num\E9ro du banc selectionn\E9\n'
      NIBASC  'en Inversion Video et\n'
      NIBASC  'les bancs disponibles\n'
      NIBASC  'et switchables \n'
      NIBASC  'ainsi que la position\n'
      NIBASC  'de la protection en\n'
      NIBASC  '\E9criture.Pour les 2\n'
      NIBASC  'ports.\n'
      NIBASC  '\n'
      NIBASC  '\n'
      NIBASC  'BS1: (num\E9ro du banc)\n'
      NIBASC  '\AF\AF\AF\n'
      NIBASC  'Switch la carte en port\n'
      NIBASC  '1 sur le banc demand\E9\n'
      NIBASC  '\n'
      NIBASC  '\n'
      NIBASC  'BS2: (num\E9ro du banc)\n'
      NIBASC  '\AF\AF\AF\n'
      NIBASC  'Switch la carte en port\n'
      NIBASC  '2 sur le banc demand\E9'

A bit strange is the lack of argument checks for BS1 and BS2 (prior to using SWAP), which are commands accessible to the user. If you simply execute these commands (with no arguments), you could possibly crash the calculator (usage of SysRPL command SWAP without guaranteeing sufficient arguments; oddly the checks come after SWAP).

Anyway, the code uses UNCNFG at address #C0000h to unconfigure card slot 2 (if necessary) and does a series of reads at #FFFF?h. This suggests that there is probably an additional chip on the card that acts as a latch. This also suggests that it may not work correctly for an HP48SX with cards in both slots.

As for a warmstart, it appears to be designed into the program. When you request a bankswitch, it sets up an alarm that does a warmstart and configures the ports. (I was wrong earlier w/ respect to my warmstart comments.) Perhaps you may want to check that the bank was actually switched as a warmstart is not a cause for alarm (pun optional).

Graph 3D | QPI | SolveSys
Find all posts by this user
Quote this message in a reply
03-23-2015, 01:42 AM
Post: #15
RE: '91 TDS 256KB RAM Card for the HP-48 SX
(03-22-2015 11:22 PM)Han Wrote:  ...you may want to check that the bank was actually switched as a warmstart is not a cause for alarm (pun optional).

Groan....ouch. But I can see how couldn't let that go by...

--Bob Prosperi
Find all posts by this user
Quote this message in a reply
03-23-2015, 01:22 PM
Post: #16
RE: '91 TDS 256KB RAM Card for the HP-48 SX
Hi all,

I have tried it in both ports on the GX, but with the same results... No joy.
So what do you all recommend me to do?
/Matti
Find all posts by this user
Quote this message in a reply
03-23-2015, 01:32 PM
Post: #17
RE: '91 TDS 256KB RAM Card for the HP-48 SX
(03-23-2015 01:22 PM)MattiMark Wrote:  Hi all,

I have tried it in both ports on the GX, but with the same results... No joy.
So what do you all recommend me to do?
/Matti

Totally out of left field suggestion: Since this card seems to be quite rare, sell it to a collector and get 2 normal 128KB cards that behave normally. Sorry, not a technically savvy suggestion, but it may get you to where you want to be faster than continuing to fight with old/undocumented equipment.

One last thing - have you checked that card in a different GX and/or checked a different (e.g. 32 or 128KB) card in this machine to verify your machine is working properly.

--Bob Prosperi
Find all posts by this user
Quote this message in a reply
03-23-2015, 03:41 PM
Post: #18
RE: '91 TDS 256KB RAM Card for the HP-48 SX
(03-23-2015 01:22 PM)MattiMark Wrote:  Hi all,

I have tried it in both ports on the GX, but with the same results... No joy.
So what do you all recommend me to do?
/Matti

Can you share what results you are seeing, aside from warmstarts (which are part of the bankswitching process)?

Graph 3D | QPI | SolveSys
Find all posts by this user
Quote this message in a reply
03-24-2015, 08:05 AM
Post: #19
RE: '91 TDS 256KB RAM Card for the HP-48 SX
(03-23-2015 01:32 PM)rprosperi Wrote:  
(03-23-2015 01:22 PM)MattiMark Wrote:  Hi all,

I have tried it in both ports on the GX, but with the same results... No joy.
So what do you all recommend me to do?
/Matti

Totally out of left field suggestion: Since this card seems to be quite rare, sell it to a collector and get 2 normal 128KB cards that behave normally. Sorry, not a technically savvy suggestion, but it may get you to where you want to be faster than continuing to fight with old/undocumented equipment.

One last thing - have you checked that card in a different GX and/or checked a different (e.g. 32 or 128KB) card in this machine to verify your machine is working properly.

Oh, yes I have tried different 128 KB Cards in the GX. These work just fine in the SX as well
Find all posts by this user
Quote this message in a reply
03-24-2015, 02:37 PM
Post: #20
RE: '91 TDS 256KB RAM Card for the HP-48 SX
(03-23-2015 01:32 PM)rprosperi Wrote:  
(03-23-2015 01:22 PM)MattiMark Wrote:  Hi all,

I have tried it in both ports on the GX, but with the same results... No joy.
So what do you all recommend me to do?
/Matti

Totally out of left field suggestion: Since this card seems to be quite rare, sell it to a collector and get 2 normal 128KB cards that behave normally. Sorry, not a technically savvy suggestion, but it may get you to where you want to be faster than continuing to fight with old/undocumented equipment.

One last thing - have you checked that card in a different GX and/or checked a different (e.g. 32 or 128KB) card in this machine to verify your machine is working properly.

That's a good suggestion. Ebaying it as memory for the TDS 48 surveying system or advertising it in the classifieds of P.O.B or Professional Surveyor would find a buyer that is willing to pay because he uses it to make money and he'll already have the card with software to drive it. I don't remember exactly when they started the ability to access your full card. Maybe as early as v4.02, for sure by 4.12.
Find all posts by this user
Quote this message in a reply
Post Reply 




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