HP 42S/DM42/Free42: Drawing Lines and Circles
Introduction
The HP 42S, Swiss Micros DM42, and Free42 has several graphics commands that allows for drawing and plotting functions. The following programs draw simple geometric objects on the calculator's screen:
HLINE: horizontal line
VLINE: vertical line
DLINE: a line between two points
DCIRC: draw a circle given a center point and radius
The graphics screen of the 42S is 131 x 16. The x axis goes from 1 to 131 to the right, while the y axis goes from 1 to 16 down.
To plot points along the line, use the equation:
y = slope * x + (y1 - x1 * slope)
where slope = (y1 - y0) / (x1 - x0)
For the circle, the pixels to be plotted are:
x' = x + r * sin θ
y' = x + r * cos θ
for θ from 0° to 360° (0 to 2π in radians)
Since a full circle is plotted, we don't have to worry about accounting for the fact that the y axis is inverted.
Commands used:
CLLCD: clear the screen
PRLCD: print the screen. Depending on whether the printer is on or off and what machine is being used, the screen would printed to the optional infrared printer or saved as a print file. Turning print off (by the PROFF setting) will just display the screen.
PIXEL: Takes the arguments from the y-stack and x-stack and draws a pixel. There are several flags that can affect how the command operates, that is beyond the scope of this blog entry. Non-integer numbers can be used as pixels.
HP 42S/DM42/Free42 Program: HLINE
00 { 58-Byte Prgm }
01 LBL "HLINE"
02 "X START?"
03 PROMPT
04 STO 01
05 "X END?"
06 PROMPT
07 STO 02
08 "Y?"
09 PROMPT
10 STO 03
11 RCL 02
12 1ᴇ3
13 ÷
14 RCL+ 01
15 STO 00
16 CLLCD
17 LBL 01
18 RCL 03
19 RCL 00
20 IP
21 PIXEL
22 ISG 00
23 GTO 01
24 PRLCD
25 END
HP 42S/DM42/Free42 Program: VLINE
00 { 58-Byte Prgm }
01 LBL "VLINE"
02 "X?"
03 PROMPT
04 STO 03
05 "Y START?"
06 PROMPT
07 STO 01
08 "Y END?"
09 PROMPT
10 STO 02
11 RCL 02
12 1ᴇ3
13 ÷
14 RCL+ 01
15 STO 00
16 CLLCD
17 LBL 01
18 RCL 00
19 IP
20 RCL 03
21 PIXEL
22 ISG 00
23 GTO 01
24 PRLCD
25 END
HP 42S/DM42/Free42 Program: DLINE
The x coordinates are entered first. The point (x0, y0) is the to left of the point (x1, y1) and x0 < x1 is required. Attempt to draw vertical lines where x0 = x1 using DLINE will result in an error.
00 { 89-Byte Prgm }
01 LBL "DLINE"
02 "X0 < X1"
03 AVIEW
04 STOP
05 "X0?"
06 PROMPT
07 STO 01
08 "X1?"
09 PROMPT
10 STO 03
11 1ᴇ3
12 ÷
13 RCL+ 01
14 STO 00
15 "Y0?"
16 PROMPT
17 STO 02
18 "Y1?"
19 PROMPT
20 STO 04
21 X<>Y
22 -
23 RCL 03
24 RCL- 01
25 ÷
26 STO 05
27 RCL× 03
28 +/-
29 RCL+ 04
30 STO 06
31 CLLCD
32 LBL 01
33 RCL 00
34 IP
35 RCL× 05
36 RCL+ 06
37 RCL 00
38 IP
39 PIXEL
40 ISG 00
41 GTO 01
42 PRLCD
43 END
HP 42S/DM42/Free42 Program: DCIRC
00 { 70-Byte Prgm }
01 LBL "DCIRC"
02 "X CTR?"
03 PROMPT
04 STO 01
05 "Y CTR?"
06 PROMPT
07 STO 02
08 "RADIUS?"
09 PROMPT
10 STO 03
11 DEG
12 0.36005
13 STO 00
14 CLLCD
15 LBL 01
16 RCL 00
17 IP
18 RCL 03
19 →REC
20 RCL+ 01
21 X<>Y
22 RCL+ 02
23 X<>Y
24 PIXEL
25 ISG 00
26 GTO 01
27 PRLCD
28 .END.
These programs and routines can be used stand-alone or as subroutines.
You can download the four programs here:
https://drive.google.com/file/d/1FJqVTkGMAtLa-0eMBHQ1LEfdKGt55VNM/view?usp=sharing
Eddie
All original content copyright, © 2011-2020. Edward Shore. Unauthorized use and/or unauthorized distribution for commercial purposes without express and written permission from the author is strictly prohibited. This blog entry may be distributed for noncommercial purposes, provided that full credit is given to the author.