'91 TDS 256KB RAM Card for the HP-48 SX - MattiMark - 03-19-2015 04:59 AM
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é
RE: '91 TDS 256KB RAM Card for the HP-48 SX - rprosperi - 03-19-2015 01:15 PM
(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?
RE: '91 TDS 256KB RAM Card for the HP-48 SX - Guenter Schink - 03-19-2015 01:55 PM
It was discussed here recently.
HTH Günter
RE: '91 TDS 256KB RAM Card for the HP-48 SX - Christoph Giesselink - 03-19-2015 08:00 PM
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
RE: '91 TDS 256KB RAM Card for the HP-48 SX - Guenter Schink - 03-19-2015 08:16 PM
(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
RE: '91 TDS 256KB RAM Card for the HP-48 SX - Christoph Giesselink - 03-19-2015 11:39 PM
(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
RE: '91 TDS 256KB RAM Card for the HP-48 SX - matthiaspaul - 03-19-2015 11:46 PM
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
RE: '91 TDS 256KB RAM Card for the HP-48 SX - Han - 03-21-2015 06:06 PM
(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.
RE: '91 TDS 256KB RAM Card for the HP-48 SX - MattiMark - 03-22-2015 04:55 PM
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
RE: '91 TDS 256KB RAM Card for the HP-48 SX - rprosperi - 03-22-2015 06:48 PM
(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.
RE: '91 TDS 256KB RAM Card for the HP-48 SX - MattiMark - 03-22-2015 08:01 PM
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
RE: '91 TDS 256KB RAM Card for the HP-48 SX - Han - 03-22-2015 08:40 PM
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.
RE: '91 TDS 256KB RAM Card for the HP-48 SX - rprosperi - 03-22-2015 08:54 PM
(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.
RE: '91 TDS 256KB RAM Card for the HP-48 SX - Han - 03-22-2015 11:22 PM
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).
RE: '91 TDS 256KB RAM Card for the HP-48 SX - rprosperi - 03-23-2015 01:42 AM
(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...
RE: '91 TDS 256KB RAM Card for the HP-48 SX - MattiMark - 03-23-2015 01:22 PM
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
RE: '91 TDS 256KB RAM Card for the HP-48 SX - rprosperi - 03-23-2015 01:32 PM
(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.
RE: '91 TDS 256KB RAM Card for the HP-48 SX - Han - 03-23-2015 03:41 PM
(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)?
RE: '91 TDS 256KB RAM Card for the HP-48 SX - MattiMark - 03-24-2015 08:05 AM
(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
RE: '91 TDS 256KB RAM Card for the HP-48 SX - d b - 03-24-2015 02:37 PM
(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.
|