Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

FEM48/49 v5.3 updated to SR4

212 views
Skip to first unread message

cas...@gmail.com

unread,
May 18, 2008, 7:44:05 AM5/18/08
to
Hello all,

After a period of some 4.5 years I have made an update to the FEM48
Structural Analysis program (also for HP49/49+/50 calcs). It is a bug
fix of the Query module, the Huber-Hencky stress was not calculated
properly (shame on me). Thanks to Claus Dachselt for reporting the bug
(and finding me, after all these years).
The update is already posted on hpcalc.org.

Regards,
Caspar

Please note that the e-mail adres used for posting this message is NOT
in use by me. Have a look at the included manual in the downloadable
package for a correct e-mail address.

estradarodas2003

unread,
May 18, 2008, 2:08:40 PM5/18/08
to

Good job for the most advance HP structural analysis program

cas...@gmail.com

unread,
May 26, 2008, 2:48:20 PM5/26/08
to
Having just ordered an HP50G... I am looking at some small
improvements for the FEM49 library, like implementing the FAST routine
again.
On the HP48G this turned the display off, but for the HP50G I would
like to use the ARM toolbox with adjustment of the clock speed
programs as distributed by Al Borowski.

The EvalFast routine of FEM48 looks like:

* EvalFast
*
* FAST evaluation (turns LCD off)
::
12 GETcfg (use FAST?)
ITE
::
CODE
GOSBVL =SAVPTR
GOSBVL =DisableIntr
GOSBVL #1D44
GOSBVL =AllowIntr
GOVLNG =GETPTRLOOP
ENDCODE
ERRSET
EVAL
ERRTRAP
::
CODE
GOSBVL =SAVPTR
GOSBVL =DispOn
GOVLNG =GETPTRLOOP
ENDCODE
ERRJMP
;
CODE
GOSBVL =SAVPTR
GOSBVL =DispOn
GOVLNG =GETPTRLOOP
ENDCODE
;
EVAL
;

Could I just replace this by:

* EvalFast
*
* FAST evaluation (turns LCD off)
::
12 GETcfg (use FAST?)
ITE
::
C124s
ERRSET
EVAL
ERRTRAP
::
CFIX
ERRJMP
;
CFIX
;
EVAL
;

Andreas Möller

unread,
May 26, 2008, 3:44:01 PM5/26/08
to
Hello Caspar,

IIRC turning off the display does not improve the speed of the
calculation on an ARM based machine.

This is the code I use inside an ERRSET/ERRTRAP to set the clock speed
to 203 MHz of the ARM processor. It is based on Al Borowski´s code so
the screen does flicker sometimes.
Please remember that you need an ERRSET/ERRTRAP because if an error
happens the processor will still run with 203 MHz until the next warm
start and at 203 MHz the keyboard does not work, so you need to use
the 75 MHz code twice, once at the end inside the ERRSET/ERRTRAP and
once in case an error happens
This will compile directly in debug4x as the ARM code is encoded as a
binary inside the Saturn ML code.

HTH,
Andreas

This will set the ARM processor to 203 MHz:

CODE
GOSBVL =SAVPTR
GOSBVL PTR_IsApple_ Ticks 3D1 auf simulierten 49G,
Ticks 21 auf simulierten 49G+
GOC weiter203 Ticks 0A falls Carry gesetzt, Ticks
03 falls Carry NICHT gesetzt
GOVLNG =GETPTRLOOP
weiter203
INTOFF INTOFF = disable keyboard
interrupts Ticks 05
LC(5) #000B9 B4h + 5 = B9h
GOSBVL =CREATETEMP erzeuge in TEMPOB einen Platzhalter
für den Pointer zu unterem String

GOSUB StrEnd203 Der String ist B4 Nibbles lang +5
für den Prolog -> B4h + 5 = B9h
CON(5) =DOCSTR
REL(5) StrEnd203
NIBHEX
0000000FFF4D29E37610A3EFFC20A3E1202282E0002185E70410A3E4001182E50C20A3E4002
NIBHEX
184E4002184E4002184E4002184E4002184E4002184E27610A3E4001182E1AA20A3E1302282E0002
NIBHEX 185EFFF8DB8EDDDDDDDD
StrEnd203
C=RSTK % Now you have a pointer to the grob

B=B-CON A,6 Ticks 0A
C=C+B A Ticks 07
D0=C Ticks 08
C=B A Ticks 07 LC(5) #000B9 dauert auch Ticks 07
GOSBVL =MOVEUP Ticks 4C6 hier

D1=D1+ 5
A=DAT1 A
D1=D1+ 12
D0=A
AD1EX von GOSBVL =SAVPTR bis vor LC(5) #FFFF8
dauert dies Ticks AE5
**** Anfang ursprünglicher Original-Code Anfang
* INTOFF % das stimmt nicht: hiermit funktioniert die ON-
Taste bei Übertaktung nicht Ticks 05
* D0=A % Ticks 08 Pointer zum
String in D0
* D0=D0+ 5 % Ticks 07 Überspringe
Prolog des String
* A=DAT0 A % Ticks 12 Schreibe die
Größe des String in A
* D0=D0+ 12 % Ticks 07 Springe an
den Anfang der Stringdaten
* AD0EX % Ticks 08 Tausche A
und D0, D0=Größe des String A=Anfang der Stringdaten
**** Ende ursprünglicher Original-Code Ende
**********************************************************************************************************************************

LC(5) #FFFF8 % Ticks 07 Lade #FFFF8
in C
C=C&A A % Ticks 09 Logical AND
also called "logical product"
D1=C % Ticks 08
RSTK=C % Ticks 08
AD0EX % Ticks 08
A=A-CON A,12 % Ticks 0A
C=A A % Ticks 08
BUSCC
CON(2) #06 % Ticks 08 = MOVEDN $80B60
C=RSTK % Ticks 08
BUSCC
CON(2) #FF % Ticks 06 = ARMSAT $80BFF

GOVLNG =GETPTRLOOP
ENDCODE

********************************************************
And this will set the ARM processor to 75 MHz:

* 13.01.07 ANFANG schalte den Rechnner auf 75MHz zurück ANFANG schalte
den Rechnner auf 75MHz zurück ANFANG
CODE
GOSBVL =SAVPTR
GOSBVL PTR_IsApple_ Ticks 3D1 auf simulierten 49G,
Ticks 21 auf simulierten 49G+
GOC weiter75 Ticks 0A falls Carry gesetzt, Ticks
03 falls Carry NICHT gesetzt
GOVLNG =GETPTRLOOP
weiter75
INTOFF INTOFF = disable keyboard
interrupts Ticks 05
LC(5) #000D1 #CCh + 5 = D1h
GOSBVL =CREATETEMP erzeuge in TEMPOB einen Platzhalter
für den Pointer zu unterem String

GOSUB StrEnd75 Der String ist CC Nibbles lang +5
für den Prolog -> #CCh + 5 = D1h
CON(5) =DOCSTR
REL(5) StrEnd75
NIBHEX
0000000FFF4D29E27610A3E4001182E34A20A3E2102282E0002185E37610A3E11B20A3E1202
NIBHEX
282E0002185E70410A3E4001182E20C20A3E4002184E30C20A3E4002184E4002184E4002184E4002
NIBHEX 184E4002184E50C20A3E4002184E4002184EFFF8DB8E
StrEnd75
C=RSTK % Now you have a pointer to the grob

B=B-CON A,6 Ticks 0A
C=C+B A Ticks 07
D0=C Ticks 08
C=B A Ticks 07 LC(5) #000B9 dauert auch Ticks 07
GOSBVL =MOVEUP Ticks 4C6 hier

D1=D1+ 5
A=DAT1 A
D1=D1+ 12
D0=A
AD1EX von GOSBVL =SAVPTR bis vor LC(5) #FFFF8
dauert dies Ticks AE5
**** Anfang ursprünglicher Original-Code Anfang
* INTOFF % das stimmt nicht: hiermit funktioniert die ON-
Taste bei Übertaktung nicht Ticks 05
* D0=A % Ticks 08 Pointer zum
String in D0
* D0=D0+ 5 % Ticks 07 Überspringe
Prolog des String
* A=DAT0 A % Ticks 12 Schreibe die
Größe des String in A
* D0=D0+ 12 % Ticks 07 Springe an
den Anfang der Stringdaten
* AD0EX % Ticks 08 Tausche A
und D0, D0=Größe des String A=Anfang der Stringdaten
**** Ende ursprünglicher Original-Code Ende
**********************************************************************************************************************************

LC(5) #FFFF8 % Ticks 07 Lade #FFFF8
in C
C=C&A A % Ticks 09 Logical AND
also called "logical product"
D1=C % Ticks 08
RSTK=C % Ticks 08
AD0EX % Ticks 08
A=A-CON A,12 % Ticks 0A
C=A A % Ticks 08
BUSCC
CON(2) #06 % Ticks 08 = MOVEDN $80B60
C=RSTK % Ticks 08
BUSCC
CON(2) #FF % Ticks 06 = ARMSAT $80BFF

GOVLNG =GETPTRLOOP
ENDCODE
* 13.01.07 ENDE schalte den Rechnner auf 75MHz zurück ENDE schalte
den Rechnner auf 75MHz zurück ENDE

cas...@gmail.com

unread,
May 26, 2008, 3:54:52 PM5/26/08
to
Hello Andreas,

Thank you for your swift reaction.

Since I asked if the routines of Al Borowski could be used (please
read my message again, and nothe the nice error trap...), after
reading your answer I take it that this is possible.

But, is 203 MHz safe to use? In Al's documentation he mentions a "safe
option": 124 MHz?

Caspar

Andreas Möller

unread,
May 26, 2008, 3:55:11 PM5/26/08
to
What I forgot (but you might have discovered this directly in the
code): this is compatible with the old saturn processor as the test at
the beginning checks for an ARM based machine and if it is running on
a Frozen Hampster Butt (FHB) nothing happens. The test is very fast
and allows to have one source code for all machines this way.

=PTR_IsApple_ EQU #3FEF1
* Carry on ARM based machine, first availabe in ROM 1.22

HTH,
Andreas

Andreas Möller

unread,
May 26, 2008, 4:08:04 PM5/26/08
to
Hello Caspar

> But, is 203 MHz safe to use? In Al's documentation he mentions a "safe
> option": 124 MHz?

I have been using this option on several machines (a lot more than I
own) and never got a complain from anybody nor did someone reported
any trouble so far.

IMHO going from 75 MHz to 124 MHz is hardly noticeable unless we are
talking about a lenghty running program (a minute or more).

Of course the overclocking to 203 MHz is only used rarley at some very
time critical points and never runs longer than one second (in real
time). I do not know what happens if you leave an overclocked machine
that way for a longer time period but if you want to use a different
clockspeed you need to replace the string with the appropriate binary
ARM code and adjust the value for =CREATETEMP as the binary ARM code
is copied into this ram area.

HTH,
Andreas


Andreas Möller

unread,
May 26, 2008, 4:15:47 PM5/26/08
to
> Could I just replace this by:
>
> * EvalFast
> *
> * FAST evaluation (turns LCD off)
> ::
> 12 GETcfg (use FAST?)
> ITE
> ::
> C124s
> ERRSET
> EVAL
> ERRTRAP
> ::
> CFIX
> ERRJMP
> ;
> CFIX
> ;
> EVAL
> ;

I use my code that way:
::
ERRSET
::
SetTo203Mhz
run my code...
SetTo75MHz
;
ERRTRAP
SetTo75MHz
;

HTH
Andreas

0 new messages