home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / sys / hp48 / 4008 < prev    next >
Encoding:
Text File  |  1992-07-24  |  9.3 KB  |  344 lines

  1. Newsgroups: comp.sys.hp48
  2. Path: sparky!uunet!decwrl!concert!rock!seq!sicsoft.epfl.CH!grand
  3. From: grand@sicsoft.epfl.CH ((grand))
  4. Subject: My compiler
  5. Message-ID: <9207241338.AA23238@sicsoft.epfl.ch>
  6. Sender: daemon@seq.uncwil.edu (Admin)
  7. Organization: UNCW news/mail gateway service
  8. Date: Fri, 24 Jul 1992 14:38:49 GMT
  9. Lines: 333
  10.  
  11.  
  12.  
  13. Hello,
  14.  
  15. First, I beg your pardon for my bad english. I nevertheless hope that you'll 
  16. understand all the following.
  17.  
  18. I have just finished written the version 2.2 of my compiler for the HP-48SX. 
  19. It can now compile mixed USER RPL instructions, SYSTEM RPL instructions and 
  20. assembly language.
  21.  
  22. For example, here is a little program, STRSWAP, which swaps two characters in 
  23. a string. This program is not optimised, it is only a demonstration program 
  24. for my compiler.
  25.  
  26. Its syntax is :
  27.  
  28.         3: string
  29.         2: position of the first character
  30.         1: position of the second character
  31.  
  32.         If you type "ABCDEFGHIJ" 7 2 STRSWAP, the result is "AGCDEFBHIJ"
  33.  
  34. Here is the listing of STRSWAP :
  35.  
  36. ; Program STRSWAP
  37. ; Exchange characters n1 and n2 of a string
  38. ; Usage : 3:stirng 2:n1 1:n2 --> 1:string
  39. ; Demonstration program for the HP-48 compiler written by Laurent Grand
  40. ; E-mail address : grand@sicsoft.epfl.ch
  41.  
  42. ; Compiler's default mode is USER RPL
  43.  
  44. \<< R\->B SWAP R\->B    ; Transforms X and Y in binary integers
  45.     ROT "" +            ; Makes a copy of the string
  46.  
  47. SYSRPL                  * Pass in SYSTEM RPL mode
  48. ::
  49.         CK3NOLASTWD                 * Check for arguments
  50.         CK&DISPATCH1 #BB3
  51.         ::                          * if arguments are OK
  52.  
  53. ASSEMBLE
  54.  
  55.         include addr-48.as      ; Loads the main HP-48 addresses
  56.  
  57.  
  58.         nibhex  #18EDF
  59.         nibhex  prolog_system_binary
  60.         nibhex  #00BB3
  61.  
  62.         nibhex  begin_code
  63.         rel(5)  fincode
  64.         gosbvl  save_reg
  65.         d1=d1+5
  66.         a=dat1  a
  67.         d0=a
  68.         d0=d0+10
  69.         c=dat0  a
  70.         d=c     a       ; d = X
  71.         d=d-1   a
  72.         d=d+d   a
  73.         d1=d1+5
  74.         a=dat1  a
  75.         d0=a
  76.         d0=d0+10
  77.         c=dat0  a
  78.         b=c     a       ; b = Y
  79.         b=b-1   a
  80.         b=b+b   a
  81.         d1=d1-10
  82.         a=dat1  a
  83.         d0=a
  84.         d0=d0+5
  85.         c=0     w
  86.         c=dat0  a
  87.         lahex   #00005
  88.         c=c-a   a
  89.         ?c<=b    a
  90.         goyes   fin     ; skip if Y > size of string
  91.         ?c<=d    a
  92.         goyes   fin     ; skip if X > size of string
  93.         d0=d0+5         ; d0 = ^first character of the string
  94.         ad0ex
  95.         c=a     a
  96.         a=a+b   a
  97.         d0=a
  98.         c=c+d   a
  99.         d1=c
  100.         a=dat0  b
  101.         c=dat1  b
  102.         dat0=c  b
  103.         dat1=a  b
  104. fin     gosbvl  load_reg
  105.         a=dat0  a
  106.         d0=d0+5
  107.         pc=(a)
  108. fincode nibhex  end_prog
  109.  
  110.         ENDCODE
  111.  
  112.         ;
  113.  
  114. USRRPL          ; Back to USER RPL mode
  115.  
  116.     ROT ROT DROP2 \>>
  117.  
  118.  
  119.  
  120. My compiler produces a downloadable binary file for the HP-48SX.
  121. It optionnaly produces a listing file. Here is the listing file for STRSWAP :
  122.  
  123.          ; Program STRSWAP
  124.          ; Exchange characters n1 and n2 of a string
  125.          ; Usage : 3:stirng 2:n1 1:n2 --> 1:string
  126.          ; Demonstration program for the HP-48 compiler written by Laurent Grand
  127.          ; E-mail address : grand@sicsoft.epfl.ch
  128.          
  129.          ; Compiler's default mode is USER RPL
  130.  
  131. D9D20E16 \<<
  132. 32       
  133. B9691    R\->B
  134. DBBF1    SWAP
  135. B9691    R\->B
  136.          ; Transforms X and Y in binary integers
  137. E0CF1    ROT
  138. C2A20500 ""
  139. 00       
  140. 76BA1    +
  141.          ; Makes a copy of the string
  142.          
  143.          SYSRPL
  144.          * Pass in SYSTEM RPL mode
  145. D9D20    ::
  146. 86A81    CK3NOLASTWD
  147.          * Check for arguments
  148. 2BF81    CK&DISPATCH1
  149. 119203BB #BB3
  150. 00       
  151. D9D20    ::
  152.          * if arguments are OK
  153.          
  154.          ASSEMBLE
  155.          
  156.                  include addr-48.as      ; Loads the main HP-48 addresses
  157.          ; File HP-48.AS
  158.          ; Contains the main addresses of the HP-48SX
  159.          
  160.          
  161.           define load_reg        #067d2
  162.           define save_reg        #0679b
  163.           define write_zeroes    #0675c
  164.           define divide          #65807
  165.           define multiply        #0db9b
  166.           define malloc          #06ad8
  167.           define garb_collect    #0613e
  168.           define divide_by_5     #06a8e
  169.           define copy_nibs       #0670c
  170.           define copy_nibs_back  #066b9
  171.           define begin_prog      d9d20
  172.           define end_prog        b2130
  173.           define begin_code      ccd20
  174.           define prolog_system_binary    #02911
  175.           define prolog_real             #02933
  176.           define prolog_long_real        #02955
  177.           define prolog_complex          #02977
  178.           define prolog_long_complex     #0299d
  179.           define prolog_character        #029bf
  180.           define prolog_array            #029e8
  181.           define prolog_linked_array     #02a0a
  182.           define prolog_string           #02a2c
  183.           define prolog_binary_integer   #02a4e
  184.           define prolog_list             #02a74
  185.           define prolog_directory        #02a96
  186.           define prolog_algebraic        #02ab8
  187.           define prolog_unit             #02ada
  188.           define prolog_tagged           #02afc
  189.           define prolog_graphic          #02b1e
  190.           define prolog_library          #02b40
  191.           define prolog_backup           #02b62
  192.           define prolog_library_data     #02b88
  193.           define prolog_program          #02d9d
  194.           define prolog_code             #02dcc
  195.           define prolog_global_name      #02e48
  196.           define prolog_local_name       #02e6d
  197.           define prolog_xlib_name        #02e92
  198.          
  199.          
  200.          
  201. FDE81            nibhex  #18EDF
  202. 11920            nibhex  prolog_system_binary
  203. 3BB00            nibhex  #00BB3
  204.          
  205. CCD20            nibhex  begin_code
  206. D8000            rel(5)  fincode
  207. 8FB9760          gosbvl  save_reg
  208. 174              d1=d1+5
  209. 143              a=dat1  a
  210. 130              d0=a
  211. 169              d0=d0+10
  212. 146              c=dat0  a
  213. D7               d=c     a       ; d = X
  214. CF               d=d-1   a
  215. C7               d=d+d   a
  216. 174              d1=d1+5
  217. 143              a=dat1  a
  218. 130              d0=a
  219. 169              d0=d0+10
  220. 146              c=dat0  a
  221. D5               b=c     a       ; b = Y
  222. CD               b=b-1   a
  223. C5               b=b+b   a
  224. 1C9              d1=d1-10
  225. 143              a=dat1  a
  226. 130              d0=a
  227. 164              d0=d0+5
  228. AF2              c=0     w
  229. 146              c=dat0  a
  230. 80824500         lahex   #00005
  231. 00       
  232. E2               c=c-a   a
  233. 8B9              ?c<=b    a
  234. 52               goyes   fin     ; skip if Y > size of string
  235. 8BB              ?c<=d    a
  236. 02               goyes   fin     ; skip if X > size of string
  237. 164              d0=d0+5         ; d0 = ^first character of the string
  238. 132              ad0ex
  239. D6               c=a     a
  240. C0               a=a+b   a
  241. 130              d0=a
  242. CB               c=c+d   a
  243. 135              d1=c
  244. 14A              a=dat0  b
  245. 14F              c=dat1  b
  246. 14C              dat0=c  b
  247. 149              dat1=a  b
  248. 8F2D760  fin     gosbvl  load_reg
  249. 142              a=dat0  a
  250. 164              d0=d0+5
  251. 808C             pc=(a)
  252. B2130    fincode nibhex  end_prog
  253.          
  254.                  ENDCODE
  255.          
  256. B2130    ;
  257.          
  258.          USRRPL
  259.          ; Back to USER RPL mode
  260.          
  261. E0CF1    ROT
  262. E0CF1    ROT
  263. 3FBF1    DROP2
  264. 93632B21 \>>
  265. 30       
  266.          
  267. You may choose the width of the code column. In the example, I choosed width 
  268. of 8 characters.
  269.  
  270.  
  271. An other example of program is STR2NAME, which transforms a non-empty string 
  272. into an algebraic. Here is the listing file :
  273.  
  274.                  SYSRPL
  275.                  * Program STR2NAME
  276.                  * Transforms a string in an algebraic
  277.                  * Usage : 1:string -> 1:algebraic
  278.                  
  279. D9D20            ::
  280. 2BA81            CK1NOLASTWD
  281. D9F81            CK&DISPATCH0
  282. D0040            str
  283.                  * check for argument 1: string
  284. D9D20            ::
  285. 90236            DUPNULL$?
  286. B3A16            ?SEMI
  287.                  * exit if null string
  288. 51B50            $>ID
  289.                  * call str->alg routine
  290. B2130            ;
  291. B2130            ;
  292.                  
  293.                  
  294.                  
  295. Fine, no ?
  296.  
  297. You may include comments in any part of the program.
  298.  
  299. My compiler is able to compile every USER RPL instructions, even such as
  300.  
  301. 'A*B/-COMB(AA(X,Y),\v/M)'
  302.  
  303. where \v/ is the symbol given for the square root when you transfer a program 
  304. in ASCII mode, translate code 3, and AA is any function with two arguments.
  305.  
  306. You can transfer an executable file or a string containing the hexadecimal
  307. code of your program (or your object).
  308.  
  309. The compiler works in translate code 3, with a '.' for the decimal point.
  310.  
  311. ===> The compiler runs on DOS compatible systems. <===
  312.  
  313. If you are interested, I sell you a registered version of it (with a little
  314. documentation file) for 20 US dollars or 30 swiss francs. The package contains 
  315. a documentation file about SYSTEM RPL instructions. You can receive it on 
  316. either 5 1/4'' or 3 1/2'' floppy disk. The documentation files are in english. 
  317. All the compiler's messages in english.
  318.  
  319. My S-mail -> 31. August 1992 :
  320.  
  321.             Laurent Grand
  322.             Grand-Rue 26
  323.             1820 Montreux
  324.             SWITZERLAND
  325.  
  326. My S-mail after 31. August 1992 :
  327.  
  328.             Laurent Grand
  329.             Chemin du Borgeaux
  330.             1817 Brent
  331.             SWITZERLAND
  332.  
  333. My Email :
  334.  
  335.              grand@sicsoft.epfl.ch
  336.  
  337.  
  338. The easiest (and less expensive) way for the payment is to slip a banknote
  339. in your S-mail.
  340.  
  341. Have a nice day !
  342.  
  343. Laurent Grand
  344.