HP50g ram and working dir.
|
08-16-2017, 01:55 PM
Post: #1
|
|||
|
|||
HP50g ram and working dir.
So I was reading the interesting thread about FRAM cards (nice piece of technology).
Then I realized that in the hp50g port0 is the HOME directory, but there is another ram port, port1 (IRAM 127Kb). As far as I know, with firmware 2.15, if one does some computation, the memory in port 0 is used. Would it be possible to have, as working ram directory, port1 ? So one can mess around there, then move the results either in home/port2 (I find port3 mostly usable for backups at the moment, still very valuable). Wikis are great, Contribute :) |
|||
08-16-2017, 09:57 PM
Post: #2
|
|||
|
|||
RE: HP50g ram and working dir.
(08-16-2017 01:55 PM)pier4r Wrote: So I was reading the interesting thread about FRAM cards (nice piece of technology). The old Saturn processor had only 20 bits addresses, and it counted in nibbles, not bytes so it could only address 2^19 = 512 kbytes of memory. Part of that address space was taken by the ROM, leaving only 256 kbytes maximum RAM addressable directly. Anything beyond that has to be temporarily mapped in banks (these are the ports). So the extra RAM was assigned to Port1 because the 50g already maxed out the addressing capacity of the Saturn, it can't be used directly for directories and variables because is not contiguous to the main memory, and has to be mapped in/out all the time, but you are free to STO/RCL/PURGE objects in it. You are not allowed to create a directory structure in port memory, though, all your variables will be at the root so is not the best choice for organization. |
|||
08-17-2017, 07:16 AM
Post: #3
|
|||
|
|||
RE: HP50g ram and working dir.
Claudio, thanks for the great explanation. I couldn't expect that it was another limit of the Saturn emulation.
Wikis are great, Contribute :) |
|||
08-18-2017, 08:11 PM
(This post was last modified: 08-18-2017 08:12 PM by pier4r.)
Post: #4
|
|||
|
|||
RE: HP50g ram and working dir.
Even if Claudio told me that directories cannot be saved in port 1 (nor port 2 as far as I know) I remember that the second 50g that I bought for the newRPL had directories in port2.
Indeed I just copied, with the filer, a directory from HOME to port 2 or port1, and it worked. (I can even navigate through its structure) Now. If the filer can do it, while am I not able to do it with STO? Like: { DIR } RCL "testDir" 1 @or 2 \->TAG STO I get an error how can I trigger what the built in filer does? Should I always do it manually? Wikis are great, Contribute :) |
|||
08-18-2017, 08:52 PM
Post: #5
|
|||
|
|||
RE: HP50g ram and working dir.
Hello,
if you want to store a directory in Port0/1/2 (remember Port3 is not a port) simply put the dir on level 1 and then store it. Example: 1: DIR TEST 99 END This is a very simple dir and a directory is an object as everything else (Prologue 02A96). Then simply do :1:YouNameIt and press [STO] and your dir is in Port1 > If the filer can do it The Filer can do it, as it "browses" through the object. If you want to do this, than simply write a piece of software that can step through/show/browse a directory object - it is this simple as everything in RPL is an object :-) A simple quote from "Introduction to Saturn Assembly Language" (available on hpcalc.org): Part V: Objects 55 Objects overview Objects are an essential part of the HP 48 and 49. Everything put on the stack is an object, and they’re all encoded the same way: they start with a 5-nibble prologue that identifies the object, and then the object follows in what is called the “body” of the object. The object is, in a way, a shell, and data is put inside of it. What is the prologue? It’s not only something to identify the object, but in fact it also contains the address of a code routine that is used to execute the object. So the prologue not only identifies something but also executes it. Some objects, when evaluated, just put themselves on the stack, like strings. If you [EVAL] a string, it remains on the stack. But, if you put a global name onto the stack and [EVAL] it, the contents of the variable that corresponds to the global name is put on the stack. The global name’s prologue was evaluated, and it pushed the variable’s contents onto the stack. We are now going to study each object type of the HP 48 and 49, so this is a rather long part. HTH, Andreas http://www.software49g.gmxhome.de |
|||
08-18-2017, 09:36 PM
(This post was last modified: 08-18-2017 09:36 PM by pier4r.)
Post: #6
|
|||
|
|||
RE: HP50g ram and working dir.
Thanks Andreas. I identified my error.
"name" 1 \->TAG STO does not work (but works for the SD card) 'name' 1 \->TAG STO works I am not sure why 'name' is needed for port1 (or 2 or 0) while port 3 (SD) accepts "name" in double quotes. Maybe due to the different way port 0,1,2 get handled compared to port 3. Well, TIL (Today I learned) Wikis are great, Contribute :) |
|||
08-18-2017, 10:49 PM
Post: #7
|
|||
|
|||
RE: HP50g ram and working dir.
(08-18-2017 08:11 PM)pier4r Wrote: Even if Claudio told me that directories cannot be saved in port 1 (nor port 2 as far as I know) I remember that the second 50g that I bought for the newRPL had directories in port2. Just semantics... I said you cannot create a directory structure, not that you can't store directories. As Andreas mentioned, directories are objects and can be stored, but it's a "blob" and cannot be traversed, you can't access individual variables within them. The filer does some visual stunts for you... it detects that the blob is a directory object, and scans into it "manually", giving the illusion that you can traverse it, but for all other commands it's still a big blob of data. |
|||
08-19-2017, 06:20 AM
Post: #8
|
|||
|
|||
RE: HP50g ram and working dir.
(08-18-2017 10:49 PM)Claudio L. Wrote: Just semantics... I said you cannot create a directory structure, not that you can't store directories. As Andreas mentioned, directories are objects and can be stored, but it's a "blob" and cannot be traversed, you can't access individual variables within them. Ah, good to know then. My bad. I thought I could do what the filer does. Wikis are great, Contribute :) |
|||
08-19-2017, 06:51 AM
Post: #9
|
|||
|
|||
RE: HP50g ram and working dir.
(08-18-2017 10:49 PM)Claudio L. Wrote:(08-18-2017 08:11 PM)pier4r Wrote: Even if Claudio told me that directories cannot be saved in port 1 (nor port 2 as far as I know) I remember that the second 50g that I bought for the newRPL had directories in port2. Yes and no. YES, new variables cannot be created (saved) into directories in ports 1 or 2, and YES, already-existing variables in directories in ports 1 or 2 cannot be purged individually, but NO, it IS possible to RECALL (or evaluate) already-existing variables individually from directories in ports 1 or 2, by specifying them with "port tagged paths". For example, if VAR2 is a variable in a directory called VAR1 which is saved in Port 2, then :2:{VAR2 VAR1} RCL will recall it from that directory. Instead of RCL you can also use EVAL, which is helpful if VAR2 is a program and you want to run it without recalling that entire directory to main memory. It might also need to be pointed out that directories in ports 1 and 2 are very different from directories in Port 3 in the 50g. Directories in ports 1 and 2 are merely backups of main-memory directories, and are shown as "DIR" objects in the browser. But "DIR" objects in Port 3 are NOT backed up directories from main memory (those are shown as "HPDIR" objects), but are rather DOS directories (AKA folders) which can be accessed by any computer with an SD card reader. *Those* kinds of directories CAN be fully accessed directly by the HP 50g (not only by the filer). You can purge, store, overwrite, recall, and execute any object stored in any Port 3 "DIR" directly, individually, without recalling the entire directory to main memory. The paths are specified as port-tagged DOS paths in string form, e.g. :3:"VAR2/VAR1". Due to a bug in the HP 50g, port-tagged paths don't work with HPDIR objects in port 3. So if you want to access directories in port 3 the way they can be accessed in ports 1 and 2, you should use DOS directories instead, and use port-tagged string paths as shown in the previous paragraph. Sorry if the above is already well-known, but I see references to this so seldom that I thought it might be a good time to review it. <0|ɸ|0> -Joe- |
|||
08-19-2017, 09:54 AM
Post: #10
|
|||
|
|||
RE: HP50g ram and working dir.
(08-19-2017 06:51 AM)Joe Horn Wrote: Sorry if the above is already well-known, but I see references to this so seldom that I thought it might be a good time to review it. Absolutely it was not known by me! Thanks for sharing! I love when different experts add more and more details over a topic. This forum is often amazing due to this phenomena happening not too seldom. Wikis are great, Contribute :) |
|||
08-20-2017, 10:15 AM
(This post was last modified: 08-20-2017 07:28 PM by pier4r.)
Post: #11
|
|||
|
|||
RE: HP50g ram and working dir.
context: hp50g, rom 2.15
Ok so I have a directory in port 1. (sorry, I am determined, at least for a while, to use it. Actually in my case it is RAM never used) I save it with <DIR object on the stack> 'dirName' 1 \->TAG STO I can recall elements with {dirName varName} 1 \->TAG RCL But how do I list the directory variables? 1 PVARS returns {1:dirName} {1:dirName} PVARS returns "nice try" (error) TVARS and VARS process the current directory (so only port 0 directory) Any idea? Of course it is likely I am missing some command that is new to me, so I appreciate the enlightenment. Many thanks Update: my search strings on comp.sys.hp48 did not return anything useful. It seems no one had the need of listing the contents of a directory in port1 or port2 (or he was good enough to do it on his own, without sharing). Wikis are great, Contribute :) |
|||
08-20-2017, 07:29 PM
(This post was last modified: 08-20-2017 07:30 PM by pier4r.)
Post: #12
|
|||
|
|||
RE: HP50g ram and working dir.
As alternative path I am recalling the directory on the stack (so using port0 at the end), but I cannot explode it.
DIR <contents> END @dir object OBJ\-> returns an error. Do you know any possible useful directions? (before parsing the object itself) Wikis are great, Contribute :) |
|||
08-20-2017, 08:51 PM
Post: #13
|
|||
|
|||
RE: HP50g ram and working dir.
(08-20-2017 10:15 AM)pier4r Wrote: Ok so I have a directory in port 1. I save it with Short answer: You don't. Port-tagged path access is intended to be used when you already know what's in a directory because you created it. If you need to go exploring, use the Filer. Longer answer: There's no simple built-in way (like PVARS) to list the variables in a directory stored in a port. You'd have to write a program to do that. Here's a possibly helpful System RPL program that explodes a directory object onto the stack. Recall the directory onto level 1, then run this program, and the directory's contents will be exploded onto the stack, with each variable's contents occupying one stack level and its name on the level below it. A number is left on level 1, indicating how many variables were in the directory. Code: :: BYTES: 65.0, #86D2h <0|ɸ|0> -Joe- |
|||
08-20-2017, 10:23 PM
(This post was last modified: 08-20-2017 10:24 PM by pier4r.)
Post: #14
|
|||
|
|||
RE: HP50g ram and working dir.
Joe thanks for the direction!
In general I agree with "you created the directory, that cannot be modified, you know what is there". The context, though, is about backups. I backup a directory and then I compare it with the production directory expecting consistency until a certain point (of course the new data point won't be in the backup). For example I may add a variable in the production dir that is not listed in a "old" backup. Therefore I wanted to list the variables within the dir coming from the backup, to check only those variables. Wikis are great, Contribute :) |
|||
08-21-2017, 02:15 AM
Post: #15
|
|||
|
|||
RE: HP50g ram and working dir.
Here's an idea: An easy way to make the contents of backups listable is by saving VARS into a variable immediately before performing the backup. For example, if you save VARS into 'Vars', and call the backup 'BAKUP' in Port 2, then :2:{BAKUP Vars} RCL will yield the list of BAKUP's contents. If you do this consistently, then all your backups will be listable.
<0|ɸ|0> -Joe- |
|||
08-21-2017, 02:27 AM
Post: #16
|
|||
|
|||
RE: HP50g ram and working dir.
(08-19-2017 09:54 AM)pier4r Wrote:(08-19-2017 06:51 AM)Joe Horn Wrote: Sorry if the above is already well-known, but I see references to this so seldom that I thought it might be a good time to review it. Neither was known to me! I had no idea RCL could access individual variables inside directories in port memory. Still learning new things after all these years... |
|||
08-21-2017, 05:56 AM
(This post was last modified: 08-21-2017 05:56 AM by pier4r.)
Post: #17
|
|||
|
|||
RE: HP50g ram and working dir.
(08-21-2017 02:15 AM)Joe Horn Wrote: Here's an idea: An easy way to make the contents of backups listable is by saving VARS into a variable immediately before performing the backup. For example, if you save VARS into 'Vars', and call the backup 'BAKUP' in Port 2, then :2:{BAKUP Vars} RCL will yield the list of BAKUP's contents. If you do this consistently, then all your backups will be listable. You know what? When I read such things I realize how poor I am. instead of trying the ways that are more economical (in this case, effort), I try those that are pointing in one direction and that's it. It is not bad to learn in that direction, but it is not flexible. Thanks for the tip it is what I am going to do. It sounds reasonable to me. @Claudio: it is very nice to hear such things from you. If you learn new stuff every now and then on a device that is obvious that you like, it is obvious that the same will be valid for me, 100! times more. Wikis are great, Contribute :) |
|||
08-21-2017, 08:15 AM
Post: #18
|
|||
|
|||
RE: HP50g ram and working dir.
I add here the first working version of my backup comparison, so other like me can use it as example.
Code:
Wikis are great, Contribute :) |
|||
« Next Oldest | Next Newest »
|
User(s) browsing this thread: 1 Guest(s)