In the absence of a complete repurposing of the 30b, I decided to come up with a set of key reassignments and/or programs to make the 30b more easily useable (to me, at least) as a scientific calculator. I decided to implement the following functions in the 10 available program slots:
SIN-1
COS-1
TAN-1
Complex add
Complex subtract
Complex multiply
Complex divide
Complex Invert
Polar to Rectangular Conversion
Rectangular to Polar Conversion
Complex numbers and Rectangular to Polar functions are based on the (old) paradigm of representing a complex number in rectangular form with the real in stack-x and the imaginary in stack-y. Stack-z and stack-t hold the second complex value for add, subtract, multiply and divide, with the 4-level real stack considered a 2-level complex stack. Complex invert preserves the stack-z and stack-t values. The polar to rectangular routine also preserves the stack so you can enter a complex rectangular value, then enter a complex polar value, convert it to rectangular form and then add, subtract, multiply or divide with the first value. R->P and P->R work in both radians and degrees mode. All programs display a message when complete to announce the function just executed. I also put the same message as step 1 to act as a program label for several of the routines, but did not have enough room to do so for all. I did not really attempt to optimize the programs - once I got them working with all routines fitting in memory, I stopped. I'm sure there is room for improvement. I'd like to have enough room to add the program labels to all programs, but I'll leave that as an exercise for the reader.
I wish the 30b had 10 more program slots and maybe double the memory so I could move a few more functions to the keyboard and create some additional routines.
Prgm 0
Program Description: Arc Sine
bytes and checksum: 18.057
Step function comments
0 SH7 assign to shift-hold 7
1 message SIN-1 Program label
2 Math execute SIN-1 function
3 Input execute SIN-1 function
4 Down execute SIN-1 function
5 Input execute SIN-1 function
6 message SIN-1 displays SIN-1 upon completion
7 StopPrgm 1
Program Description: Arc Cosine
bytes and checksum: 13.253
Step function comments
0 SH8 assign to shift-hold 8
1 Math execute COS-1 function
2 Input execute COS-1 function
3 Up execute COS-1 function
4 Up execute COS-1 function
5 Input execute COS-1 function
6 message COS-1 displays COS-1 upon completion
7 StopPrgm 2
Program Description: Arc Tangent
bytes and checksum: 12.009
Step function comments
0 SH9 assign to shift-hold 8
1 Math execute TAN-1 function
2 Input execute TAN-1 function
3 Up execute TAN-1 function
4 Input execute TAN-1 function
5 message TAN-1 displays TAN-1 upon completion
6 StopPrgm 3
Program Description: Add two rectangular form complex numbers
bytes and checksum: 24.218
Step function comments
0 SH+ assign to shift-hold +
1 message CPLX+ Program label
2 ) Swap
3 ( Rv Roll down
4 +
5 ( Rv Roll down
6 +
7 ( Rv Roll down
8 ( Rv Roll down
9 ( Rv Roll down
10 message CPLX+ displays CPLX+ upon completion
11 StopPrgm 4
Program Description: Subtract two rectangular form complex numbers
bytes and checksum: 25.053
Step function comments
0 SH- assign to shift-hold -
1 message CPLX- Program label
2 ) Swap
3 ( Rv Roll down
4 -
5 ( Rv Roll down
6 ) Swap
7 -
8 ( Rv Roll down
9 ( Rv Roll down
10 ( Rv Roll down
11 message CPLX- displays CPLX- upon completion
12 StopPrgm 5
Program Description: Multiply two rectangular form complex numbers
bytes and checksum: 49.254
Step function comments
0 SH* assign to shift-hold x
1 message CPLX* Program label
2 Lbl 04 Program label for call from divide routine
3 STO 1
4 STO 3
5 (Rv Roll down
6 STO 2
7 STO 4
8 ( Rv Roll down
9 STO * 1
10 STO * 4
11 ( Rv Roll down
12 STO * 2
13 STO * 3
14 RCL 4
15 +
16 RCL 1
17 RCL - 2
18 message CPLX* displays CPLX* upon completion
19 RTN Return for CallPrgm 6
Program Description: Divide two rectangular form complex numbers
bytes and checksum: 20.047
Step function comments
0 SH/ assign to shift-hold /
1 message CPLX/ Program label
2 Call03 execute complex invert routine
3 Call04 execute complex multiply routine
4 message CPLX/ displays CPLX/ upon completion
5 StopPrgm 7
Program Description: Invert a rectangular form complex number
bytes and checksum: 47.060
Step function comments
0 NPV assign to the NPV key
1 message CPLX x-1 Program label
2 Lbl 03 Program label for call from divide routine
3 STO 1
4 ( Rv Roll down
5 ( Rv Roll down
6 ( Rv Roll down
7 STO 2 Store value that was at top of stack
8 ( Rv Roll down
9 STO * 1
10 ) Swap
11 +/-
12 Input
13 x^2
14 RCL + 1
15 /
16 ) Swap
17 Ans
18 /
19 RCL 2
20 ( Rv Roll down
21 message CPLX x-1 displays CPLX x-1 upon completion
22 RTN Return for CallPrgm 8
Program Description: Rectangular to Polar Conversion (by Thomas Klemm)
Bytes and checksum: 55.134
Step function comments
0 IRR assign to the IRR key
1 message R->P Program label
2 STO 1 store real component
3 x^2 square real component
4 ) Swap swap squared real component and imaginary component
5 STO 2 store imaginary component
6 x^2 square imaginary component
7 + add squared imaginary component
8 square root take square root to calculate magnitude
9 STO 3 store magnitude
10 Input duplicate magnitude to stack y since GF consumes stack x value
11 GF 02 branch to end if magnitude = 0
12 RCL + 1 add real component: r + x
13 Input duplicate r + x to stack y since GF consumes stack x value
14 GF 01 branch if magnitude + real component = 0
15 RCL 2 imaginary component: y
16 ) Swap swap y and r + x
17 / divide to calculate tangent of half-angle: y / (r + x)
18 Math execute TAN-1 function
19 Input execute TAN-1 function
20 Up execute TAN-1 function
21 Input execute TAN-1 function
22 Gto 02 branch to end
23 Lbl 01 Routine to handle magnitude + real component = 0 part
24 Math execute COS-1 function to obtain 180 (or Pi)
25 Input execute COS-1 function to obtain 180 (or Pi)
26 Up execute COS-1 function to obtain 180 (or Pi)
27 Up execute COS-1 function to obtain 180 (or Pi)
28 Input execute COS-1 function to obtain 180 (or Pi)
29 Lbl 02 Label for branch in steps 11 and 22
30 2 enter two
31 * multiply half-angle by 2 to get angle
32 RCL 3 recall magnitude
33 message R->P displays R->P upon completion
34 StopPrgm 9
Program Description: Polar to Rectangular Conversion
bytes and checksum: 25.058
Step function comments
0 CashFl assign to the CashFl key
1 message P->R Program label
2 STO 1 store magnitude
3 ( Rv Roll down to preserve stack
4 Cos take cosine of angle
5 Ans recall the angle
6 Sin take sine of angle
7 RCL * 1 calculate imaginary component
8 ) Swap
9 RCL * 1 calculate real component
10 message P->R displays P->R upon completion
11 Stop
edited to use much better R->P routine by Thomas Klemm and add more program labels.
Edited: 24 Aug 2010, 8:23 p.m. after one or more responses were posted