home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / sys / hp48 / 4322 < prev    next >
Encoding:
Text File  |  1992-08-19  |  8.3 KB  |  217 lines

  1. Newsgroups: comp.sys.hp48
  2. Path: sparky!uunet!charon.amdahl.com!pacbell.com!mips!darwin.sura.net!jvnc.net!gmd.de!Germany.EU.net!mcsun!news.funet.fi!funic!nntp.hut.fi!nntp.hut.fi!mheiskan
  3. From: mheiskan@hut.fi (Mika Heiskanen)
  4. Subject: Re: XLIB headers???
  5. In-Reply-To: detlef@dmhh.hanse.de's message of 15 Aug 92 22:02:01 GMT
  6. Message-ID: <MHEISKAN.92Aug20033729@lesti.hut.fi>
  7. Sender: usenet@nntp.hut.fi (Usenet pseudouser id)
  8. Nntp-Posting-Host: lesti.hut.fi
  9. Reply-To: mheiskan@.vipunen.hut.fi
  10. Organization: Helsinki University of Technology - Finland
  11. References: <MHEISKAN.92Aug12010216@vipunen.hut.fi> <713916121snx@dmhh.hanse.de>
  12. Date: 20 Aug 92 03:37:29
  13. Lines: 202
  14.  
  15.  
  16. After some more hacking here's some more info I've found out about the
  17. headers. Please post if you have any additional info about these. I intend
  18. to use most of the features described below.
  19.  
  20. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  21. The XLIBs in libraries are arranged as follows:
  22.  
  23. header XLIB-program object/pointer obj/pntr ...
  24.  
  25. The header:
  26. ~~~~~~~~~~~
  27. The header is always 1 or 3 nibbles long. If flag xx8 is set, the header is
  28. only one nibble long. This is used mainly to save 2 nibbles/XLIB.
  29. Each flag set, except 008, also has a corresponding object after the XLIB.
  30.  
  31. Here's a list of all the flags, and the purpose of the corresponding object:
  32.  
  33. 008:          @ 1-nibble marker. (This one causes no object after the XLIB.)
  34. 004: eqwr     @ Equation writer routine
  35. 002: speval.1 @ Same as 200 ??? Used if 008 flag is set ???
  36. 001: hex      @ A binary integer specifying an unusual display format
  37. 080: der      @ Derivation routine
  38. 040: rinv     @ Inversion routine (Used by ISOL)
  39. 020: make     @ An algebraic maker for routines having unusual arguments
  40. 010: spapply  @ ?? Used atleast by EXPAN to hinder APPLY command
  41. 800: rules    @ RULES menu (There are several different ones in memory.)
  42. 400: intg     @ Pattern matching for integration
  43. 200: speval   @ Used to go from stack args to algebraics?
  44. 100: repl     @ Used when exploding/imploding algebraics
  45.  
  46. Objects/pointers:
  47. ~~~~~~~~~~~~~~~~~
  48. The above flags are used by various programs to indicate special display or
  49. a special method for some operation. For instance, almost all the work of
  50. ISOL is done by recalling the inversion routine stored after each XLIB
  51. (which in turn call the next one).
  52.  
  53. The order of these objects is:
  54. (header XLIB) eqwr speval.1 hex der rinv make spapply rules intg speval repl
  55.  
  56. Each of these 'objects' can be:
  57. - a 'real', prologed object
  58. - a system binary
  59. - a pointer to some object (system binary too)
  60.  
  61. If the (pointed) object is a system binary, RclData (#C612) is used to
  62. fetch the data at the address pointed by the system binary. RclData fetches
  63. the data from hidden ROM, if the address is in the range 70000-7FFFF.
  64.  
  65. Here are some examples from ROM:
  66.  
  67. 080               @ Derivation routine exists
  68. :: PI program ;   @ The main program for PI
  69. r_DROP%0          @ Pointer to DROP%0 (derivation of constants!)
  70.  
  71. CC0 :: SIN ;
  72. rr_DERSIN         @ Pointer to a # that points to DERSIN in hidden ROM
  73. rr_RINVSIN        @ .............. inversion routine .................
  74. rr_RULESmenu9     @ ..........9th RULESmenu in the hidden ROM (has ->DEF etc)
  75. r_INTGSIN         @ # that points to pattern matching in hidden ROM
  76.  
  77. One with the actual memory contents: (addresses inverted)
  78. 8C5 :: + ;
  79. 6BA97             @ 6BA97: EQWR+-* (Same routine for +,- and *)
  80. 02A4E 0000A 70107 @ Binary integer to specify priority and display format
  81. 56B91             @ 56B91: #7BAC0    @ 7BAC0: DER+ 
  82. 57455             @ 57455: #7B5F2    @ 7B5F2: RINV+
  83. 3F103             @ 3F103: #7DBBF    @ 7DBBF: RULESmenu1
  84.  
  85. If the 008 flag is set, there other flags can still be set. Examples:
  86. A: speval.1 follows       @ Used by rpnXROOT (control passed to XROOT)
  87. E: eqwr and speval follow @ Used by rpnDER, rpnINTG, rpn|
  88.  
  89. I have named all these references in entries4 file, which I will post
  90. probably tonight to seq.uncwil.edu. (It has lots of other new entries too)
  91.  
  92. The 'hex' object
  93. ~~~~~~~~~~~~~~~~
  94. The flag xx1 set means that there is a special display format for the XLIB.
  95. The format is specified by the hex object after the XLIB.
  96.  
  97. If the flag is cleared, the XLIB in question will be assinged by the
  98. fetching routines a hex integer according to it argument count as follows:
  99. (By checking for CK<n>&Dispatch and similar structures.)
  100.  
  101. 1 arg : 014050        @ X(a)
  102. 2 args: 01406050    @ X(a,b)
  103. 3 args: 0140606050      @ X(a,b,c)
  104. 4 args: 014060606050    @ X(a,b,c,d)
  105. 5 args: 01406060606050  @ X(a,b,c,d,e)
  106. N args: 0140950        @ X(a,.....)   (Atleast one)
  107. (The stack displays these binaries in reversed order)
  108.  
  109. By comparing these with some of the ones having special display formats it
  110. is easy to see that each nibble has a meaning:
  111.  
  112. 0 = argument    (a) @ Also serves as end mark?
  113. 1 = XLIB name   (N) @ The XLIB name will be put in that place
  114. 2 = argument    (s) @ The only difference I can think between 0 and 2 is
  115.                     @ execution priority. Seems that 0 should be EVALed first
  116. 3 = global name (i) @ Only global name is accepted in this place by the parser
  117. 4 = "("             @ Left parentheses..
  118. 5 = ")"
  119. 6 = ","
  120. 7 = "="
  121. 9 = infarg repeater @ Repeats ",arg,arg...."
  122. B = i=a repeater    @ Repeats ",id=arg,id=arg..."
  123.  
  124. Also the first/last nibble may mean algebraic priority depending on
  125. argument counts. The ones causing me trouble are:
  126.  
  127. 8 = ???? used by NEG to correct +/- ????
  128. A = ????
  129. C = ???? Special priority. See text later. ????
  130.  
  131. Some examples now:
  132.  
  133. 90109: (^)
  134. 80108: *,MOD,(/)
  135. 70107: +,-
  136. 60106: ==,<>,<,>,<=,>=
  137. 50105: AND
  138. 40104: OR,XOR
  139. 00700: =                 (This one doesn't use XLIB_NAME since 7 is usable)
  140.  
  141. Those are clearly: (Priority arg XLIB_NAME arg Priority)
  142. The reason why / and ^ are in parentheses is that they have another form
  143. too. Here's the 'hex' object pointed to by /: (1AFE1) 
  144.  
  145.   :: Tst_7068D:1 hex_8014050 hex_80108 RPITE ;
  146.  
  147. Thus there are forms a/(b) and a/b. I don't know what the test is about
  148. though. Similar tests are done by ^ and SQRT (NOT by +,-,*...).
  149.  
  150. Now some more complicated ones:
  151.  
  152.          P der id ( s ) end
  153. DER    : 0 1   3  4 2 5 0
  154.  
  155. INTG   : 014060626350    @ INTEGRATE(a,a,s,id)
  156. SUM    : 014370606250    @ SUM(id=a,a,s)
  157. |      : 2214370B50      @ s|(id=a,.....)  B repeats ",id=a" ie 370
  158. QUOTE  : 014250          @ QUOTE(s)
  159. APPLY  : 014360950       @ APPLY(id,a,....) 9 repeats ",a" ie 60
  160.  
  161. !      : A010            @ a!     (Highest priority (A))
  162. NOT    : 0105            @ NOT a  (5 is priority)
  163. NEG    : 0108            @ 
  164. SQRT   : 010C            @ C as priority seems weird, so it might have some
  165.                          @ hidden meanings too
  166.  
  167. See the difference for ! and the rest?
  168.  
  169.  
  170. repl flag
  171. ~~~~~~~~~
  172. The repl flag is used by functions that take arguments in unusual ways.
  173. The corresponding object is a list of programs/pntrs for
  174. exploding/imploding and argument count checking:
  175. { imploder   @ Example: Der does   ID&Meta -> ALG_ID ALG(Meta)
  176.   counter    @ Example: | uses DROPeven#? to check ID&arg pairs
  177.                         INTEGRATE uses #4=
  178.   exploder   @ Used by OBJ-> to get the exploded 'user' version
  179. }
  180. Some XLIBs have only the first 2 objects in the list.
  181.  
  182.  
  183. What comes to the other objects, I'm still hacking.
  184.  
  185. Unsupported entries
  186. ~~~~~~~~~~~~~~~~~~~
  187. These entry points are not supported, so they may work in rev E only.
  188. The names are from entries4 file.
  189.  
  190. 26B40 = CmdFlagSet? @ If bit xx8 is set then True (XLIB is a command)
  191.                     @ seco -> seco TRUE/FALSE
  192. 26B73 = rpnSpEval?  @ Used to get the evaluation prg for args???
  193.                     @ seco -> seco FALSE / seco' TRUE
  194. 26C47 = SpDispArgs? @ Gets argument count and the display hex
  195.                     @ seco -> seco hex #args/#FFFFF TRUE  / seco FALSE
  196. 26F0D = DerDataGet  @ seco -> seco data TRUE / seco FALSE (same for the rest)
  197. 26F1B = RinvDataGet
  198. 26F37 = SpAppDataGet
  199. 26F45 = RulesDataGet
  200. 26F53 = IntgDataGet
  201. 26F61 = SpEvalDataGet
  202. 26F6F = ReplDataGet
  203.  
  204.  
  205. That's about it. If you use these flags, then be careful. Lots of internal
  206. programs use them, so make sure what you'll get and what you should put
  207. back to the stack. I reckon the hex display number is the best place to
  208. start experimenting with.
  209.  
  210. Currently atleast MAKEROM with RPLCOMP and STAR can be used to create
  211. libraries using these flags. I'm sure Detlef will also come up with
  212. something for the <-LIB-> library :)
  213.  
  214. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  215. --
  216. --> mheiskan@vipunen.hut.fi
  217.