Post Reply 
Transferring programs to and from an HP41CL
11-25-2017, 06:56 AM (This post was last modified: 11-26-2017 09:32 AM by Ángel Martin.)
Post: #21
RE: Transferring programs to and from an HP41CL
(11-24-2017 01:28 AM)mfleming Wrote:  I have also gone through the "37-step process" to transfer a HEPAX image, disassemble it, assemble other code and merge, then package with MLDL2K into a ROM image that can be transferred back. Quite a pain, yes, but instructive. And free.

37 steps may be, but what a lotta fun that is! ;-)

ok, I feel the pain too but ultimate flexibility doesn't come for free, right?
Obviously that's a moot point if all you want is related to FOCAL programs, but for MCODE it is a powerful method despite the multiple steps.

Cheers,
ÁM

"To live or die by your own sword one must first learn to wield it aptly."
Find all posts by this user
Quote this message in a reply
11-25-2017, 02:06 PM
Post: #22
RE: Transferring programs to and from an HP41CL
(11-25-2017 06:56 AM)Ángel Martin Wrote:  37 steps may be, but what a lotta fan that is! ;-)

I totally agree, which is why I commented on that. I actually prefer to spend my time with these toys figuring out how to do these 'impossible' system things, as compared to actually calculating numbers.

While exploring stuff like this, I not only learn a lot figuring out how to do it, but also learn a lot exploring many of the ways that don't work.

As for MCODE, I will leave that you genius folks... we're all just very fortunate that you guys are so generous with your time and knowledge.

--Bob Prosperi
Find all posts by this user
Quote this message in a reply
12-01-2017, 06:13 AM
Post: #23
RE: Transferring programs to and from an HP41CL
(11-23-2017 02:08 PM)Neve Wrote:  
(11-23-2017 01:24 PM)Geir Isene Wrote:  What is the problem you encounter with the Ruby script?

I think my Ruby is not compatible with MacOS 10.13.2 High Sierra.
I'll figure it out.

Hi Neve, did you ever get it to work with High Sierre? I'm in the same spot right now, trying to get it to run on my Mac but without luck...

Cheers,

PeterP
Find all posts by this user
Quote this message in a reply
12-01-2017, 06:55 AM
Post: #24
RE: Transferring programs to and from an HP41CL
(12-01-2017 06:13 AM)PeterP Wrote:  
(11-23-2017 02:08 PM)Neve Wrote:  I think my Ruby is not compatible with MacOS 10.13.2 High Sierra.
I'll figure it out.

Hi Neve, did you ever get it to work with High Sierre? I'm in the same spot right now, trying to get it to run on my Mac but without luck...

Hi,

To be honest, I haven’t had time to try yet. But I will soon...hopefully.
Will let you know.

Engineer & Senior IT Executive
2x HP41CL, HP41CX, HP48GX, HP50g, 2x82162A Printer, 2x82143A Printer, 2x HP-IL, 2x Card-Readers, PIL-BOX.
Find all posts by this user
Quote this message in a reply
04-09-2024, 04:39 PM
Post: #25
RE: Transferring programs to and from an HP41CL
Opening an old thread (wound?)....

I don't need to create ROM or MOD files. I just want .raw files of FOCAL programs. I know a PILbox is the best way to do this, but those aren't currently available.

It seems to me that this should be possible:
- Copy programs to HEPAX RAM on the 41CL
- Copy the HEPAX RAM page(s) from the 41CL to a PC using the serial connector.
- Extract the programs from the RAM page image on the PC into .raw files.

I believe the first two steps are easy but what about the third? Does anyone have a tool that can extract data from a HEPAX RAM page image?

Thanks,
Dave
Find all posts by this user
Quote this message in a reply
04-09-2024, 05:23 PM
Post: #26
RE: Transferring programs to and from an HP41CL
Meindert has created a Windows application called ROM Handler. → ROM Handler GitHub Repository
The application can decompile a ROM or a HEPAX file.
You can then do a column copy/paste into a text file.
From there you can generate raw files with several tools.

Example using GAMES Pac ...
Code:
ROM Filename    : C:\Apps\romhandler_v02026\GAMES-1A.ROM
------------------hex---dec----------------
  XROM          : $00A  010
  # Functions   : $00F  015
  ROM Name      : GAMES   1A  (first function name)
  Pause Entry   : $000
  Program Entry : $000
  Sleep Entry   : $000
  OFF Entry     : $000
  Service Entry : $000
  ON Entry      : $000
  MemLost Entry : $000
  ROM Revision  : GA-1A
  Checksum      : $19E  CHECKSUM OK
  NOPs Counted  : 145
  41CL YCRC     : $DA9B9799

Code:
; LISTING GENERATED: 2024-04-09 13:17:34 by ROM Handler version 0.2.0.26
; OPEN FILE: C:\Apps\romhandler_v02026\GAMES-1A.ROM

                              .JDA                                    ; Jacobs/De Arras Mnemonics
                              .MCODE

_XROM       A000 00A          .XROM       %010                        ; XROM number %010

_FCNS       A001 00F          .FCNS       %015                        ; # FAT Entries  %015

_XR_010.00  A002 00F 0B3      .FATFUN     GAMES___1A    AFB3          ; MCode XROM 10.00  "GAMES   1A"
_XR_010.01  A004 200 024      .FATFUN     BAGELS        A024          ; UCode XROM 10.01  "BAGELS"
_XR_010.02  A006 202 08C      .FATFUN     BIOR          A28C          ; UCode XROM 10.02  "BIOR"
_XR_010.03  A008 205 0B7      .FATFUN     BIOF          A5B7          ; UCode XROM 10.03  "BIOF"
_XR_010.04  A00A 206 04B      .FATFUN     CRAPS         A64B          ; UCode XROM 10.04  "CRAPS"
_XR_010.05  A00C 206 0DE      .FATFUN     HANG          A6DE          ; UCode XROM 10.05  "HANG"
_XR_010.06  A00E 207 0E5      .FATFUN     PINBALL       A7E5          ; UCode XROM 10.06  "PINBALL"
_XR_010.07  A010 209 09C      .FATFUN     SWAR          A99C          ; UCode XROM 10.07  "SWAR"
_XR_010.08  A012 20D 0BE      .FATFUN     SUBHUNT       ADBE          ; UCode XROM 10.08  "SUBHUNT"
_XR_010.09  A014 20F 095      .FATFUN     BOOM          AF95          ; UCode XROM 10.09  "BOOM"
_XR_010.10  A016 20F 02D      .FATFUN     INI           AF2D          ; UCode XROM 10.10  "INI"
_XR_010.11  A018 20F 084      .FATFUN     P             AF84          ; UCode XROM 10.11  "P"
_XR_010.12  A01A 20F 069      .FATFUN     SIZE?         AF69          ; UCode XROM 10.12  "SIZE?"
_XR_010.13  A01C 20F 042      .FATFUN     RNDM          AF42          ; UCode XROM 10.13  "RNDM"
_XR_010.14  A01E 20F 05B      .FATFUN     RNDMW         AF5B          ; UCode XROM 10.14  "RNDMW"
_FATEND     A020 000 000      .FATEND                                 ; End of FAT

            A022 058 250      .UCODE      058 250                     ; UserCode: 621 bytes (88 regs + 5 bytes) NONPRIVATE
BAGELS      A024 1CA 000 0F7  001        *LBL  "BAGELS"               ; 00 42 41 47 45 4C 53 , previous LBL @A01F [-005 bytes]
            A02E 112 018      002         28
            A030 1A2 08C      003         XROM SIZE?                  ; XROM 10,12 in [GAMES___1A], this ROM
            A032 1AB 019      004         FC?C 25
            A034 18E          005         PROMPT
            A035 1A8 008      006         SF   08
            A037 1A2 08A      007         XROM INI                    ; XROM 10,10 in [GAMES___1A], this ROM
            A039 191 018      008         STO  24
            A03B 1A9 005      009         CF   05
            A03D 111 010      010         10
            A03F 191 014      011         STO  20
            A041 1CF 07B      012        *LBL  a (11)
            A043 190 019      013         RCL  25
            A045 1F7 04C 045  014         "LENGTH?"                   ; 4C 45 4E 47 54 48 3F 
            A04D 18E          015         PROMPT
            A04E 161          016         ABS
            A04F 168          017         INT
            A050 167          018         X=0?
            A051 1D1 0DD 0FE  019         GTO  d (14)                 ; LBL d (14) @A22F [+477 bytes]
            A054 118          020         8
            A055 171          021         X<>Y
            A056 145          022         X>Y?
            A057 1D1 0D7 0FE  023         GTO  d (14)                 ; LBL d (14) @A22F [+471 bytes]
            A05A 191 015      024         STO  21
            A05C 191 019      025         STO  25
            A05E 190 01B      026         RCL  27
            A060 1F8 04D 041  027         "MAX DIG?"                  ; 4D 41 58 20 44 49 47 3F 
            A069 18E          028         PROMPT
            A06A 161          029         ABS
            A06B 168          030         INT
            A06C 167          031         X=0?
            A06D 1D1 0C1 0FE  032         GTO  d (14)                 ; LBL d (14) @A22F [+449 bytes]
            A070 191 01B      033         STO  27
            A072 119          034         9
            A073 171          035         X<>Y
            A074 145          036         X>Y?
            A075 1D1 0B9 0FE  037         GTO  d (14)                 ; LBL d (14) @A22F [+441 bytes]
            A078 190 014      038         RCL  20
            A07A 143          039         /
            A07B 192 015      040         ST+  21
            A07D 1AD 008      041         FC?  08
            A07F 1D0 019 0FC  042         GTO  b (12)                 ; LBL b (12) @A099 [+025 bytes]
            A082 1FC 044 049  043         "DIGS CAN DUP"              ; 44 49 47 53 20 43 41 4E 20 44 55 50 
            A08F 17E          044         AVIEW
            A090 1F7 030 020  045         "0 LEGAL"                   ; 30 20 4C 45 47 41 4C 
            A098 17E          046         AVIEW
            A099 1CF 07C      047        *LBL  b (12)
            A09B 177          048         CLX
            A09C 191 016      049         STO  22
            A09E 1A8 01D      050         SF   29
            A0A0 1A8 009      051         SF   09
            A0A2 1F6 047 055  052         "GUESS?"                    ; 47 55 45 53 53 3F 
            A0A9 18E          053         PROMPT
            A0AA 1A9 01D      054         CF   29
            A0AC 166          055         X<0?
            A0AD 1D1 0A2 090  056         GTO  16                     ; LBL 16 @A250 [+418 bytes]
            A0B0 1A9 009      057         CF   09
            A0B2 1CF 07D      058        *LBL  c (13)
            A0B4 110          059         0
            A0B5 191 013      060         STO  19
            A0B7 191 01A      061         STO  26
            A0B9 1AD 005      062         FC?  05
            A0BB 1B1 08B      063         GTO  00                     ; LBL 00 @A0C8 [+011 bytes]
            A0BD 1AC 007      064         FS?  07
            A0BF 1B2 0A0      065         GTO  01                     ; LBL 01 @A0E1 [+032 bytes]
            A0C1 177          066         CLX
            A0C2 190 018      067         RCL  24
            A0C4 160          068         1/X
            A0C5 16B          069         R-D
            A0C6 191 018      070         STO  24
            A0C8 101          071        *LBL  00
            A0C9 1A8 005      072         SF   05
            A0CB 177          073         CLX
            A0CC 11A 012 011  074         .211327
            A0D3 183          075         ENTER^
            A0D4 119 018 012  076         9821
            A0D8 190 018      077         RCL  24
            A0DA 142          078         *
            A0DB 140          079         +
            A0DC 169          080         FRC
            A0DD 16A          081         D-R
            A0DE 160          082         1/X
            A0DF 191 018      083         STO  24
            A0E1 102          084        *LBL  01
            A0E2 1A9 007      085         CF   07
            A0E4 175          086         RDN
            A0E5 168          087         INT
            A0E6 191 017      088         STO  23
            A0E8 190 018      089         RCL  24
            A0EA 160          090         1/X
            A0EB 16B          091         R-D
            A0EC 1A8 006      092         SF   06
            A0EE 1E1 00E 08B  093         XEQ  11                     ; LBL 11 @A1FD [+270 bytes]
            A0F1 190 017      094         RCL  23
            A0F3 1A9 006      095         CF   06
            A0F5 1E1 007 08B  096         XEQ  11                     ; LBL 11 @A1FD [+263 bytes]
            A0F8 1E1 04A 0FF  097         XEQ  e (15)                 ; LBL e (15) @A243 [+330 bytes]
            A0FB 103          098        *LBL  02
            A0FC 190 08A      099         RCL  IND 10
            A0FE 190 014      100         RCL  20
            A100 193 00A      101         ST-  10
            A102 177          102         CLX
            A103 190 08A      103         RCL  IND 10
            A105 179          104         X#Y?
            A106 1B4 088      105         GTO  03                     ; LBL 03 @A110 [+008 bytes]
            A108 154          106         CHS
            A109 171          107         X<>Y
            A10A 154          108         CHS
            A10B 171          109         X<>Y
            A10C 111          110         1
            A10D 192 013      111         ST+  19
            A10F 175          112         RDN
            A110 104          113        *LBL  03
            A111 191 08A      114         STO  IND 10
            A113 171          115         X<>Y
            A114 190 014      116         RCL  20
            A116 192 00A      117         ST+  10
            A118 175          118         RDN
            A119 191 08A      119         STO  IND 10
            A11B 197 00A      120         DSE  10
            A11D 1B3 024      121         GTO  02                     ; LBL 02 @A0FB [-036 bytes]
            A11F 1E1 023 0FF  122         XEQ  e (15)                 ; LBL e (15) @A243 [+291 bytes]
            A122 105          123        *LBL  04
            A123 190 08A      124         RCL  IND 10
            A125 166          125         X<0?
            A126 1B8 099      126         GTO  07                     ; LBL 07 @A141 [+025 bytes]
            A128 1A8 007      127         SF   07
            A12A 190 019      128         RCL  25
            A12C 130          129         STO  00
            A12D 106          130        *LBL  05
            A12E 177          131         CLX
            A12F 190 080      132         RCL  IND 00
            A131 178          133         X=Y?
            A132 1B7 086      134         GTO  06                     ; LBL 06 @A13A [+006 bytes]
            A134 197 000      135         DSE  00
            A136 1B6 00B      136         GTO  05                     ; LBL 05 @A12D [-011 bytes]
            A138 1B8 087      137         GTO  07                     ; LBL 07 @A141 [+007 bytes]
            A13A 107          138        *LBL  06
            A13B 154          139         CHS
            A13C 191 080      140         STO  IND 00
            A13E 111          141         1
            A13F 192 01A      142         ST+  26
            A141 108          143        *LBL  07
            A142 197 00A      144         DSE  10
            A144 1B5 024      145         GTO  04                     ; LBL 04 @A122 [-036 bytes]
            A146 190 019      146         RCL  25
            A148 13A          147         STO  10
            A149 177          148         CLX
            A14A 109          149        *LBL  08
            A14B 191 08A      150         STO  IND 10
            A14D 197 00A      151         DSE  10
            A14F 1B9 007      152         GTO  08                     ; LBL 08 @A14A [-007 bytes]
            A151 1E0 0F1 0FF  153         XEQ  e (15)                 ; LBL e (15) @A243 [+241 bytes]
            A154 177          154         CLX
            A155 10A          155        *LBL  09
            A156 191 08A      156         STO  IND 10
            A158 197 00A      157         DSE  10
            A15A 1BA 007      158         GTO  09                     ; LBL 09 @A155 [-007 bytes]
            A15C 19C 000      159         FIX  00
            A15E 111          160         1
            A15F 192 016      161         ST+  22
            A161 1AD 007      162         FC?  07
            A163 1BB 0CD      163         GTO  10                     ; LBL 10 @A1B2 [+077 bytes]
            A165 177          164         CLX
            A166 19F 005      165         TONE 05
            A168 19F 005      166         TONE 05
            A16A 1CF 00F      167        *LBL  15
            A16C 1AD 008      168         FC?  08
            A16E 1B8 095      169         GTO  07                     ; LBL 07 @A185 [+021 bytes]
            A170 1A9 008      170         CF   08
            A172 1F4 050 04C  171         "PLC="                      ; 50 4C 43 3D 
            A177 19B 013      172         ARCL 19
            A179 1F7 07F 020  173         >" XVAL="                   ; 7F 20 58 56 41 4C 3D 
            A181 19B 01A      174         ARCL 26
            A183 17E          175         AVIEW
            A184 189          176         PSE
            A185 108          177        *LBL  07
            A186 1E0 0EB 091  178         XEQ  17                     ; LBL 17 @A272 [+235 bytes]
            A189 1F2 07F 03A  179         >":"                        ; 7F 3A 
            A18C 19C 000      180         FIX  00
            A18E 119          181         9
            A18F 190 019      182         RCL  25
            A191 141          183         -
            A192 130          184         STO  00
            A193 1CF 066      185        *LBL  A (102)
            A195 1F2 07F 020  186         >" "                        ; 7F 20 
            A198 197 000      187         DSE  00
            A19A 1D0 008 066  188         GTO  A (102)                ; LBL A (102) @A193 [-008 bytes]
            A19D 19B 013      189         ARCL 19
            A19F 1F2 07F 02D  190         >"-"                        ; 7F 2D 
            A1A2 19B 01A      191         ARCL 26
            A1A4 1A8 01D      192         SF   29
            A1A6 18E          193         PROMPT
            A1A7 1A9 01D      194         CF   29
            A1A9 187          195         CLA
            A1AA 166          196         X<0?
            A1AB 1D0 0A4 090  197         GTO  16                     ; LBL 16 @A250 [+164 bytes]
            A1AE 18F          198         ADV
            A1AF 1D0 0FE 07D  199         GTO  c (13)                 ; LBL c (13) @A0B2 [-254 bytes]
            A1B2 10B          200        *LBL  10
            A1B3 19F 008      201         TONE 08
            A1B5 19F 009      202         TONE 09
            A1B7 1FB 059 04F  203         "YOU GOT IT."               ; 59 4F 55 20 47 4F 54 20 49 54 2E 
            A1C3 17E          204         AVIEW
            A1C4 1E0 0AD 091  205         XEQ  17                     ; LBL 17 @A272 [+173 bytes]
            A1C7 17E          206         AVIEW
            A1C8 19C 000      207         FIX  00
            A1CA 187          208         CLA
            A1CB 19B 016      209         ARCL 22
            A1CD 1F7 07F 020  210         >" GUESS"                   ; 7F 20 47 55 45 53 53 
            A1D5 111          211         1
            A1D6 190 016      212         RCL  22
            A1D8 178          213         X=Y?
            A1D9 1BB 084      214         GTO  10                     ; LBL 10 @A1DF [+004 bytes]
            A1DB 1F3 07F 045  215         >"ES"                       ; 7F 45 53 
            A1DF 10B          216        *LBL  10
            A1E0 17E          217         AVIEW
            A1E1 1A8 01D      218         SF   29
            A1E3 18C          219         AON
            A1E4 1F1 04E      220         "N"                         ; 4E 
            A1E6 19A 072      221         ASTO Y (2)
            A1E8 1F9 053 041  222         "SAME? Y/N"                 ; 53 41 4D 45 3F 20 59 2F 4E 
            A1F2 18E          223         PROMPT
            A1F3 18B          224         AOFF
            A1F4 19A 073      225         ASTO X (3)
            A1F6 178          226         X=Y?
            A1F7 1D1 0B7 07B  227         GTO  a (11)                 ; LBL a (11) @A041 [-439 bytes]
            A1FA 1D1 062 07C  228         GTO  b (12)                 ; LBL b (12) @A099 [-354 bytes]
            A1FD 10C          229        *LBL  11
            A1FE 190 015      230         RCL  21
            A200 169          231         FRC
            A201 190 014      232         RCL  20
            A203 160          233         1/X
            A204 140          234         +
            A205 130          235         STO  00
            A206 177          236         CLX
            A207 190 019      237         RCL  25
            A209 13A          238         STO  10
            A20A 175          239         RDN
            A20B 1AC 006      240         FS?  06
            A20D 1BD 088      241         GTO  12                     ; LBL 12 @A217 [+008 bytes]
            A20F 174          242         R^
            A210 157          243         10^X
            A211 143          244         /
            A212 161          245         ABS
            A213 1E0 02F 0FF  246         XEQ  e (15)                 ; LBL e (15) @A243 [+047 bytes]
            A216 175          247         RDN
            A217 10D          248        *LBL  12
            A218 139          249         STO  09
            A219 10E          250        *LBL  13
            A21A 129          251         RCL  09
            A21B 169          252         FRC
            A21C 190 014      253         RCL  20
            A21E 142          254         *
            A21F 139          255         STO  09
            A220 120          256         RCL  00
            A221 171          257         X<>Y
            A222 1AC 006      258         FS?  06
            A224 142          259         *
            A225 111          260         1
            A226 140          261         +
            A227 168          262         INT
            A228 191 08A      263         STO  IND 10
            A22A 197 00A      264         DSE  10
            A22C 1BE 015      265         GTO  13                     ; LBL 13 @A219 [-021 bytes]
            A22E 185          266         RTN
            A22F 1CF 07E      267        *LBL  d (14)
            A231 19F 004      268         TONE 04
            A233 1FB 049 04C  269         "ILLEGAL NO."               ; 49 4C 4C 45 47 41 4C 20 4E 4F 2E 
            A23F 17E          270         AVIEW
            A240 1D2 000 07B  271         GTO  a (11)                 ; LBL a (11) @A041 [-512 bytes]
            A243 1CF 07F      272        *LBL  e (15)
            A245 190 019      273         RCL  25
            A247 190 014      274         RCL  20
            A249 140          275         +
            A24A 11A 010 011  276         .01
            A24D 140          277         +
            A24E 13A          278         STO  10
            A24F 185          279         RTN
            A250 1CF 010      280        *LBL  16
            A252 1A9 01D      281         CF   29
            A254 187          282         CLA
            A255 19C 000      283         FIX  00
            A257 1F4 04C 045  284         "LEN="                      ; 4C 45 4E 3D 
            A25C 19B 019      285         ARCL 25
            A25E 1F7 07F 02C  286         >", MAX="                   ; 7F 2C 20 4D 41 58 3D 
            A266 19B 01B      287         ARCL 27
            A268 17E          288         AVIEW
            A269 187          289         CLA
            A26A 1AC 009      290         FS?  09
            A26C 1D1 0D4 07C  291         GTO  b (12)                 ; LBL b (12) @A099 [-468 bytes]
            A26F 1D1 006 00F  292         GTO  15                     ; LBL 15 @A16A [-262 bytes]
            A272 1CF 011      293        *LBL  17
            A274 187          294         CLA
            A275 190 017      295         RCL  23
            A277 190 019      296         RCL  25
            A279 157          297         10^X
            A27A 143          298         /
            A27B 169          299         FRC
            A27C 19C 099      300         FIX  IND 25
            A27E 1F4 020 020  301         "    "                      ; 20 20 20 20 
            A283 19B 073      302         ARCL X (3)
            A285 188          303         ASHF
            A286 185          304         RTN
            A287 1C4 057 22F  305         END                         ; Program END, previous LBL @A024 [-611 bytes]




...






BOOM        AF95 1C6 002 0F5  041        *LBL  "BOOM"                 ; 00 42 4F 4F 4D , previous LBL @AF84 [-017 bytes]
            AF9D 19F 005      042         TONE 05
            AF9F 19F 005      043         TONE 05
            AFA1 19F 005      044         TONE 05
            AFA3 19F 004      045         TONE 04
            AFA5 185          046         RTN
            AFA6 1C6 002 22F  047         END                         ; Program END, previous LBL @AF95 [-017 bytes]
                              .MCODE

            AFB2 007 001 00D  .FNAME      "GAMES   1A"                ; 007 001 00D 005 013 020 020 020 031 081  
GAMES___1A  AFB3 3E0          RTN                       
            AFB4 000          .FILL       NOP           64            ; 64 consecutive NOPs from $AFB4 to $AFF3

_EN_PSE     AFF4 000          NOP                                     ; PAUSE interrupt
_EN_PRGM    AFF5 000          NOP                                     ; After each program line
_EN_SLEEP   AFF6 000          NOP                                     ; Awaken from DEEP SLEEP
_EN_OFF     AFF7 000          NOP                                     ; Turn OFF by key or XEQ OFF
_EN_IOSVC   AFF8 000          NOP                                     ; I/O service flag set
_EN_ON      AFF9 000          NOP                                     ; Awaken by pressing ON key
_EN_MEMLST  AFFA 000          NOP                                     ; MEMORY LOST interrupt

_ROMREV     AFFB 007 001 031  .ROMREV     GA-1A         

_CHKSUM     AFFF 19E          .CHKSUM     19E                         ; Calculated Checksum: 19E

; Label Cross reference table

; LOCAL LABELS
; SYMBOL--------ADDR----REFERENCES-------------
; _CHKSUM       AFFF    
; _EN_IOSVC     AFF8    
; _EN_MEMLST    AFFA    
; _EN_OFF       AFF7    
; _EN_ON        AFF9    
; _EN_PRGM      AFF5    
; _EN_PSE       AFF4    
; _EN_SLEEP     AFF6    
; _FATEND       A020    
; _FATEND       A021    
; _FCNS         A001    
; _ROMREV       AFFB    
; _ROMREV       AFFC    
; _ROMREV       AFFD    
; _ROMREV       AFFE    
; _XR_010.00    A002    
; _XR_010.01    A004    
; _XR_010.02    A006    
; _XR_010.03    A008    
; _XR_010.04    A00A    
; _XR_010.05    A00C    
; _XR_010.06    A00E    
; _XR_010.07    A010    
; _XR_010.08    A012    
; _XR_010.09    A014    
; _XR_010.10    A016    
; _XR_010.11    A018    
; _XR_010.12    A01A    
; _XR_010.13    A01C    
; _XR_010.14    A01E    
; _XROM         A000    
; BAGELS        A024    A004  
; BIOF          A5B7    A008  
; BIOR          A28C    A006  
; BOOM          AF95    A014  
; CRAPS         A64B    A00A  
; GAMES___1A    AFB3    A002  
; HANG          A6DE    A00C  
; INI           AF2D    A016  
; P             AF84    A018  
; PINBALL       A7E5    A00E  
; RNDM          AF42    A01C  
; RNDMW         AF5B    A01E  
; SIZE?         AF69    A01A  
; SUBHUNT       ADBE    A012  
; SWAR          A99C    A010  

; EXTERNAL REFERENCES
; SYMBOL--------VALUE---REFERENCES-------------
; No external references

Sylvain Côté
Find all posts by this user
Quote this message in a reply
04-09-2024, 11:25 PM (This post was last modified: 04-10-2024 12:46 AM by Sylvain Cote.)
Post: #27
RE: Transferring programs to and from an HP41CL
After more thinking ...

Another option would be to use V41.
  1. 41CL
    1. map HEPAX ROMs
    2. map 1 to n QROM pages
    3. format them as one HEPAX RAM filesystem
    4. loop: copy your program from main memory to HEPAX RAM with HSAVEP
    5. when ready, transfert each pages with the serial interface and clupdate (or equivalent program) and save them as ROM files
  2. Computer
    1. create a MOD file with the transferred ROM file(s) (ex: my-apps.mod)
    2. create a v41 .lod file with the 41OS, HEPAX MOD and the new MOD files. (ex. my-apps.mod)
    3. start V41
    4. CAT 2 - to validate loaded ROMs
    5. EMDIR - to validate HEPAX RAM content
    6. loop
      1. COPY "PROGRAM NAME" - copy program name from HEPAX RAM to main memory
      2. v41 / menu / put user code / select main memory program / filename.raw
      3. CLP "PROGRAM NAME"


A similar procedure could also be done with a RAMBox ROM setup.

Sylvain Côté
Find all posts by this user
Quote this message in a reply
04-10-2024, 10:50 AM
Post: #28
RE: Transferring programs to and from an HP41CL
Probably easier is to use the YPRT rom to simulate the HP82143A printer and print to the serial port, catching the output in the HP82240 simulator, and then copy the listing to a tool to create the .raw file

Regards, Meindert
Find all posts by this user
Quote this message in a reply
04-10-2024, 12:09 PM (This post was last modified: 04-10-2024 12:37 PM by Sylvain Cote.)
Post: #29
RE: Transferring programs to and from an HP41CL
(04-10-2024 10:50 AM)MeindertKuipers Wrote:  Probably easier is to use the YPRT rom to simulate the HP82143A printer and print to the serial port, catching the output in the HP82240 simulator, and then copy the listing to a tool to create the .raw file
Arrrgggg! I had completely forgotten your 2022 Allschwill meeting YPRT presentation.
I had the same thought pattern yesterday, but had to put aside all those options because it needed additional hardware. (HP-IL, USB-41, etc)
Great thinking!
Thanks!

PS: did you ever do your planned "41CL reset" project ?

Sylvain Côté
Find all posts by this user
Quote this message in a reply
04-10-2024, 02:26 PM
Post: #30
RE: Transferring programs to and from an HP41CL
Thank you, Sylvain and Meindert for your detailed responses. I think I'll try YPTR first.

Dave
Find all posts by this user
Quote this message in a reply
04-10-2024, 03:15 PM (This post was last modified: 04-10-2024 04:41 PM by Sylvain Cote.)
Post: #31
RE: Transferring programs to and from an HP41CL
I just did a small test and it is working!

  1. download and install HP82240B v1.16 printer simulation
  2. download and install LIF Utilities
  3. plug the serial cable between the 41CL and your computer
  4. 41CL basic configuration (adjust for your setup)
    Code:
    MMUDIS    // disable MMU
    MMUCLR    // clear MMU configuration
    "YFNX"    // 41CL Extreme Functions (1 page, 1 bank)
    PLUG1L    // map ROM image to page 8
    "YPRT"    // 41CL Serial Printer (1 page, 2 banks)
    PLUGP     // map ROM images to page 6
    Code:
    MMUEN     // MMU enable
    SERINI    // init serial port
    48        // communication speed
    PBAUD     // set baud rate to 4800
  5. computer side
    1. run: HP82240B.exe
    2. menu: File / Settings / Interface Setup ...
    3. set the COM port to COM_, baud rate to 4800 , parity to none
    4. set Active to COM
    5. set Printer Type to HP-82143A
    6. select EOL Suppress
  6. 41CL side
    Code:
                   // power cycle → OFF then ON
    FS? 55         // should display YES , if NO then power cycle until it become YES or review your configuration
    "HELLO WORLD"
    PRA            // should display HELLO WORLD in the HP-82143A simulator output window
    PRP "MYPROG"   // should display the program listing in the HP-82143A simulator output window
  7. Computer side
    1. copy & paste the program listing into a plain text editor
    2. for all lines: remove line prefix → (line number and space) or (line number and label special character)
    3. save text file (ex.: myprog.txt)
    4. create raw file with lifutils FOCAL compiler
      Code:
      comp41 <myprog.txt >myprog.raw


edit: typos and added details

Sylvain Côté
Find all posts by this user
Quote this message in a reply
04-11-2024, 12:36 AM
Post: #32
RE: Transferring programs to and from an HP41CL
Since YPRT only sends output to the serial port the baud rate can be much higher which improves the performance.
Sorry for the brief answers, I am several time zones away from my equipment.

Regards, Meindert
Find all posts by this user
Quote this message in a reply
04-11-2024, 03:20 AM (This post was last modified: 04-11-2024 03:24 AM by Sylvain Cote.)
Post: #33
RE: Transferring programs to and from an HP41CL
(04-11-2024 12:36 AM)MeindertKuipers Wrote:  Since YPRT only sends output to the serial port the baud rate can be much higher which improves the performance.
I had selected 4800 baud because it was the one that was reliable for ROM files update.
The maximum baud rate for the 41CL serial port is 9600 baud.

Setup
  • 41CL is set to TURBO50
  • YPRP is mapped to page 6
  • YFNX is mapped to page 8
  • GAMES pac is mapped to page 9
  • MAN mode (flags 15 & 16 cleared)
Print Time listing:
Code:
LBL "PT"
CLA
TIME
ATIME24
PRA
END

PINBALL listing:
Code:
 01◆LBL "PINBALL"
 02 7
 03 XROM "SIZE?"
 04 FC?C 25
 05 PROMPT
 06 SF 27
 07 XROM "INI"
 08 CF 21
 09 STO 00
 10 0
 11 STO 04
 12 STO 05
 13 FIX 0
 14 CF 29
 15 CF 02
 16 CF 01
 17 CF 00
 18 "$.25=3 GAMES"
 19 PROMPT
 20◆LBL A
 21 TONE 6
 22 TONE 7
 23 TONE 6
 24 1
 25 ST+ 04
 26 "$"
 27 FIX 2
 28 RCL 04
 29 4
 30 /
 31 ARCL X
 32 "Ͱ SPENT"
 33 AVIEW
 34 FIX 0
 35 TONE 8
 36 TONE 6
 37 TONE 9
 38 3
 39 ST+ 05
 40◆LBL 19
 41 "GAMES: "
 42 ARCL 05
 43 AVIEW
 44 TONE 8
 45 RTN
 46◆LBL E
 47 TONE 9
 48 RCL 05
 49 X=0?
 50 RTN
 51 1
 52 ST- 05
 53 4
 54 STO 02
 55 0
 56 STO 06
 57◆LBL 15
 58 CF IND 02
 59 DSE 02
 60 X<0?
 61 GTO 17
 62 1 E3
 63 STO 01
 64 SF IND 02
 65 5
 66 STO 03
 67 "FIRE"
 68 TONE 9
 69 PROMPT
 70◆LBL 16
 71 CLD
 72 RDN
 73 11
 74 XROM "RNDMW"
 75 SF 25
 76 TONE IND X
 77 GTO IND X
 78◆LBL 02
 79 "OUT"
 80 GTO 02
 81◆LBL 01
 82 "L"
 83 GTO 01
 84◆LBL 03
 85 "R"
 86◆LBL 01
 87 "Ͱ FLIPPER"
 88◆LBL 02
 89 AVIEW
 90 PSE
 91 X≠Y?
 92 GTO 01
 93 2
 94 X≠Y?
 95 GTO 16
 96 XROM "RNDMW"
 97 X=0?
 98 GTO 16
 99 "TILT"
100 AVIEW
101 TONE 0
102 0
103 STO 01
104◆LBL 01
105 2
106 FS?C 00
107 ST* 01
108 RCL 06
109 BEEP
110◆LBL 12
111 VIEW X
112 RCL 01
113 X=0?
114 GTO 15
115 RDN
116 1 E3
117 ST- 01
118 +
119 STO 06
120 TONE 6
121 GTO 12
122◆LBL 00
123 "MUSHROOMS"
124 100
125 ENTER↑
126 10
127 GTO 00
128◆LBL 04
129 "SPINNER"
130 50
131 ENTER↑
132 25
133◆LBL 00
134 AVIEW
135 XROM "RNDMW"
136 1
137 +
138 *
139◆LBL 13
140 TONE 9
141 DSE L
142 GTO 13
143 GTO 14
144◆LBL 05
145 "KICKOUT"
146 50
147 GTO 14
148◆LBL 06
149 "BONUS"
150 1 E3
151 ST+ 01
152 10
153 GTO 14
154◆LBL 07
155 "FLAG "
156 6
157 RCL 03
158 -
159 ARCL X
160 CLX
161 10
162 DSE 03
163 GTO 14
164 5
165 STO 03
166 CF IND 02
167 1
168 ST+ 02
169 SF IND 02
170 100
171◆LBL 14
172 AVIEW
173 10
174 X<>Y
175 FS? 00
176 *
177 TONE 7
178 TONE 6
179 CLD
180 PSE
181 ST+ 06
182 GTO 16
183◆LBL 08
184 "SLING SHOT"
185 10
186 GTO 14
187◆LBL 09
188 "SPECIAL"
189 FC?C 00
190 SF 00
191 10
192 GTO 14
193◆LBL 10
194 "ROLLOVER"
195 10
196 GTO 14
197◆LBL 17
198 5 E4
199 RCL 06
200 -
201 1
202 X>Y?
203 ST+ 05
204 X<=Y?
205 RTN
206 BEEP
207 GTO 19
208 END

Test case:
Code:
XEQ "PT"
PRP "PINBALL"
XEQ "PT"

Total time:
Code:
9600 baud → around 20 seconds
4800 baud → around 20 seconds
2400 baud → around 20 seconds
1200 baud → around 30 seconds

So, for the PRP case, the bottleneck is not the transmission speed.

Sylvain Côté
Find all posts by this user
Quote this message in a reply
04-13-2024, 05:51 PM
Post: #34
RE: Transferring programs to and from an HP41CL
(11-24-2017 01:28 AM)mfleming Wrote:  I have also gone through the "37-step process" to transfer a HEPAX image, disassemble it, assemble other code and merge, then package with MLDL2K into a ROM image that can be transferred back. Quite a pain, yes, but instructive. And free.

~Mark

is there any other way? Goodness grace, I've been doing it exactly that way for over 20 years now! ;-)

"To live or die by your own sword one must first learn to wield it aptly."
Find all posts by this user
Quote this message in a reply
04-13-2024, 05:59 PM
Post: #35
RE: Transferring programs to and from an HP41CL
(04-09-2024 04:39 PM)David Hayden Wrote:  Opening an old thread (wound?)....

It seems to me that this should be possible:
- Copy programs to HEPAX RAM on the 41CL
- Copy the HEPAX RAM page(s) from the 41CL to a PC using the serial connector.
- Extract the programs from the RAM page image on the PC into .raw files.

I believe the first two steps are easy but what about the third? Does anyone have a tool that can extract data from a HEPAX RAM page image?

Well, yes, that tool is V41 of course.
All you need is to encapsulate the HEPAX RAM page into a MOD file for V41 consumption.
This you can do with Meindert's MLDL_2k program (no need to have the H/W)

Once the MOD file is created, plug it into V41 and use "File|Put user Code" right from there to create the RAW file.

Cheers,
ÁM

"To live or die by your own sword one must first learn to wield it aptly."
Find all posts by this user
Quote this message in a reply
Post Reply 




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