Cappels' project pages
Sweep/Function Generator With Markers
Return to HOME
using Maxim MAX038 and Atmel ATiny2313 or AT90S1200A
Take Maxim's MAX038 function generator chip, add some frills, and you
have a pretty nice tool for the bench.
Main Circuit Schematic
Power Supply Schematic
You can build this with switches instead of buttons if you don't want
to use a micro controller. Here is the controller code.
AVRStudio 4.x Assembler Source for
AVRStudio 4.x hex file for
AVRStudio 4.x Assembler Source for
ATtiny2313 fsgen13050527A .asm
Related project: A DC to 20 MHz Coax Driver Using
Maxim's MAX038 function generator chip is capable of producing nearly
constant amplitude sine, square, and triangle waves with a low output
impedance, from a very low frequency to more than 20 MHz. Basically, a
function generator on a chip. Here is a function/sweep generator that
uses the MAX038 chip. The design described on these pages are not so
much instructions for duplicating the design as they are a collection
of ideas to stimulate your own thoughts.
Operation requires an oscilloscope at a minimum to set it up, and a
frequency meter is also a good idea. The waveform can be selected by
repetitively pressing the "Waveform" button until the one you want
comes out. The amplitude can be adjusted by with the variable
attenuator pot, or by using the switchable attenuators. The DC offset
on the output can be adjusted with the offset pot. The DC offset is not
affected by the attenuators.
Scope Photo: Sweeping a 455kHz
FLOW= 413 kHz, FHIGH = 512 kHz.
To set up the generator to sweep a given frequency range, first select
the band that covers the frequency of interest. Press the FLOW button
and then adjust the FLOW pot to set the lowest frequency in the sweep
range, for example 400 kHz. Then press the FHIGH button and adjust the
FHIGH pot to the highest frequency in the sweep range, for example. 500
kHz. Then press the SWEEP button and the output signal will
sweep from frequency set with the FLOW up to the frequency set
with FHIGH pot, in this case, from 400 kHz to 500 kHz, then the
frequency will rapidly return to the FLOW. The large envelope in the
middle of the waveform in the photograph above shows the bandpass of a
455 kHz ceramic filter, The two smaller envelopes at the sides
correspond to when the generator rapidly sweeps through that frequency
again as it returns the MAX038 to FLOW in preparation for another
sweep. FLOW must be set to a frequency lower than that to which FHIGH
is set in order for the circuit to sweep.
From the preceding, you should see that the generator can be operated
at a constant frequency using either the FLOW or FHIGH pots, and that
you can use them as presets and use their associated buttons to switch
between two frequencies within the same band.
Scope Photo: Sweeping from 1 MHz
to 20 MHz.
Top trace is signal out with
marker on. Bottom
trace is external marker output. Wide blanking pulse
shows "retrace" period. Marker is set to 10 MHz.
The marker system is composed of one maker circuit, and two marker
position pots. The pots can be enabled one at a time by pressing
the button next to the desired pot. The marker circuit makes a
fixed width pulse centered on the frequency to which it is set. There
are two ways to see the pulse. One is to press the
Marker On/OFF Toggle Button to cause the marker to attenuate the output
waveform during the marker pulse. The upper trace in the photograph
above shows the waveform output of the generator when set to sweep a
sine wave from 1 Mhz to 20 MHz. Marker 2 is set to 10 MHz and
enabled, which causes the narrow notch in the sweep waveform. The
wider notches are indications of the time when the saw tooth generator
that sweeps the MAX038 retraces from the FHIGH back to FLOW. A pulse
Marker Pulse connector is shown on the lower trace. Since there may be
notches and peaks in the waveform, especially when measuring the
response of a filter or other circuit, sometimes the notch in the
waveform is adequate to see the marker, and sometimes, its necessary to
use a second scope channel to see the marker clearly.
To set the frequency for Marker 1, connect the scope or frequency meter
to the Waveform Output and turn the Band Switch to the band desired,
press the Marker Mode Select Button to put the MAX038's frequency under
the control of the marker pots. Press the
Marker 1 Frequency Set Pot, which is seen as "M1" in the photograph and
is R43 in the schematic. While measuring the oscillator frequency on
Waveform Output, adjust the Marker 1 Frequency Set Pot to the
desired frequency. The frequency for Marker 2 Frequency Set Pot is set
in a similar manner.
Marker 1 Frequency Set Pot and Marker 2 Frequency Set Pot may be used
for fixed frequency presets similar to the way this can be done with
Low Frequency Set Pot and High Frequency Set Pot.
Marker Mode Select Button must be pressed to switch oscillator control
from FLOW and FHIGH pots and the sweep function to the Marker pots.
Scope Photo: Sweeping a 10.7 MHz
After setting the marker to
correspond to the peak
in filter response, the marker location was measured
as 10.66 MHz.
A sort of inverse procedure can be used to measure the frequency of a
feature in a swept envelope. The marker is centered on the feature you
want to measure the frequency of, in the case of the photo above, the
major peak in the filter response. Then the Marker Mode Select Button
us pressed so that the generator puts out a continuous signal at the
frequency set with the marker pot, and the frequency is measured. The
measured frequency corresponds to the center of the marker pulse.
A list of the basic functions is below.
Frequency Range: 0.1 HZ to 20 MHz in six bands.
P-P Output Voltage: 900 uV to 1.7 V P-P.
DC Offset: -1.4V to + 1.4V.
Output Impedance: 50 Ohms or 75 Ohms, switchable.
Sweep Range: Adjustable up to about to 300:1.
Number of markers: One maker with two independent position pots.
Attenuators: Variable 0 to -12 db; switchable -3, -10, -20, and -20 db.
Here is a list of controls:
Low Frequency Set Pot
High Frequency Set Pot
Select Low Frequency Button
Select Sweep Button
Select High Frequency Button
Marker 1 Frequency Set Pot
Marker 2 Frequency Set Pot
Market 1 Select Button
Marker 2 Select Button
Marker Mode Select Button (Switches frequency control to selected
Marker On/OFF Toggle Button
Fine Frequency Control Pot
Offset On/Off Switch
Symmetry Adjust Pot
Symmetry Variable/Fixed Pot
Variable Attenuator Pot
-3 db Switched Attenuator
-10 db Switched Attenuator
-20 db Switched attenuator (Two of them)
Power On/Off Switch
Waveform Change Button.
Sweep Start Pulse (RCA Connector)
Marker Pulse (RCA Connector)
5V P-P CMOS Out (RCA Connector)
Analog Waveform Out (BNC Connector)
The symmetry of the waveform, or duty cycle in the case of the square
wave output, is variable. The performance of the generator is highly
dependent upon physical layout. There is one frequency marker circuit
and two selectable controls. This, in conjunction with the ability to
switch the oscillator's frequency control to the selected marker pot
allows accurate setting or location of the frequency marker.
Block diagram of the sweep/marker
The Much of the circuitry is dedicated to controlling the voltage that
controls the MAX038's oscillation frequency. Multiplexers allow the
selection of the Low Frequency Set Pot, High Frequency Set Pot, either
of the two Marker Set Pots, or when the inputs to the multiplexer are
properly set, the circuit toggles between the Low Frequency Pot and
High Frequency Set Pot as the MAX038 output frequency is swept between
the corresponding frequencies. Since the output of the MAX038 can be
set to correspond to the setting of any of these four pots, enabling
the measurement of the sweep start and stop frequencies, and the
frequency of either marker with an external frequency meter or
A microcontroller is the interface
between the buttons on the front
panel and the circuitry controlled by them. There is no need to use a
microcontroller as all the circuits can be controlled by
electromechanical switches -I just used a controller because I prefer
buttons to other kinds of switches.
The main board schematic diagram of the circuit, less power supply can
seen or downloaded by clicking on the button above. Image size is 1126
X 742, about 36 K Bytes. The power supply is discussed further down
versions of the circuits, for the purpose of discussion, are shown
below, but many aspects of the overall circuit and some blocks that are
included in the main board schematic are omitted from the discussions
Use the MAX038 data sheet as reference. The things to note on this
schematic is that there is an switch to switch the symmetry control
between variable and the chip's fixed symmetry setting, and that R19
and R20 convert a -3V to +3V control voltage an the VCO control
current. Thus, the oscillation frequency is a pretty linear function of
control voltage. The frequency control voltage is supplied by the
saw tooth generator circuit, the output of which will be either a DC
voltage from one of the four frequency setting pots (F Low, F High,
Marker 1, Marker 2) or a saw tooth waveform.
The capacitance on the leads to the band switch, is pretty large
compared to the oscillator capacitance, 10 to 15 pf in my case, so I
did not put a capacitor on the band switch, but selected a capacitor to
go on the circuit board next to the MAX038. The MAX038 that I used can
oscillate up to 30 MHz when the weather is right, but the output of the
chip starts to drop and the square and triangle waves both look like
sine waves above 20 MHz anyway, so I selected a capacitor that limits
oscillation frequency to about 21 MHz.
The two waveform select control inputs, A0 and A1 are driven by
microcontroller PORTD, bits 2 and 3 respectively. Alternatively, you
can control these inputs with two pole rotary switch set up to encode
A0 and A1 according to the data sheet, or use a pair of SPST switches
and a pair of pull-up resistors, or use a pair of pull-down resistors
and use an ON-OFF-ON toggle switch to select the Sine, Square, or
A wide band amplifier with a DC offset control drives the output signal
through an impedance setting resistor and the BNC connector.
Here are some measurements indicative of the flatness of the sine wave
output from the Zetex ZXFY202N8 output
amplifier as a function of frequency. The output amplifer circuit is
not on this page, but can be seen on the main board schematic.
This is a simplified schematic of
saw tooth generator.
The circuit in the complete schematic has additional inputs.
The saw tooth generator's output drives the frequency control voltage
input of the MAX038 circuit. Refer to the simplified circuit above. The
saw tooth waveform is produced by integrator U1A. The output ramps from
the low frequency set point, which is set by R6, to the high frequency
set point, which is set by R3. When ramping up, the CD4051 multiplexer
connects the input of comparitor U1B to the R3, the high set point. The
rate at which the output of U1A changes while ramping up is determined
by the 0.22 uf integration capacitor and the value of R17 in series
output of the integrator reaches the high set point, the output of
comparitor U1B goes high, which by way of inverting comparitor U1D,
switches the CD4051 multiplexer to select the low set point. The output
of comparitor U1B also drives the resistor/-diode network on the input
of the integrator high. With the additional current through R15 into
integrator, the waveform ramps down to the low set point quickly,
a saw tooth.
The CD4051 that switches between the high set and low set pots also
enables the MAX038 control voltage to be set by the Marker pots. See
the complete schematic for these details.
The band switch has two sections. One is the frequency setting
capacitor switch shown in the schematic in the MAX038 circuit section
of this page. The other section switches among five sets of 1N916
diodes and resistors configures similar to R15 and R16 in the schematic
above, so that the sweep rate, in terms of Hz per second varies with
the frequency band. When in the highest frequency band, the one I use
most frequently, the sweep/function generator sweeps from 106 kHz to
20.76 MHz in 47 milliseconds, or 439 MHz/second. I chose this
leisurely sweep rate so as to obtain the a more accurate idea of the
response of narrow band pass filters than I could with faster scan
rates. With a CRT based oscilloscope, this would cause some flicker,
but I use this with a band pass storage scope, and therefore don't see
any flicker. To use this with a CRT based oscilloscope, reduce the
resistors by a factor of 3 to get the sweep rate, and therefore the
display refresh rate up past 70 Hz, where there should be little in the
way of perceivable flicker.
The amplitude of the output stage is controlled by a variable
attenuator that has a range of about 0 to -12 db, a -3db switched
attenuator, a -10 db switched attenuator, and two -20 db switched
attenuators. The input and output resistance are 100 ohms. This value
was chosen over a more conventional 50 ohm because it requires less
power to drive.
Measured attenuation of the
Inspection of the table above shows that the switched
accuracy of the attenuators is highly dependent upon frequency.
is, without much doubt, a result of the physical arrangement of the
components and associated wiring. Notice that the attenuators are
pretty accurate all the way down to -52 db at 200 kHz and 2 Mhz, so
more care in the wiring, perhaps using lower capacitance switches,
shielding the attenuators and better layout of the output circuitry
would certainly extend the frequency range over which the attenuators
calibration held. It might be that designing the attenuator sections
for 50 ohm impedance would have made the attenuators frequency response
flatter. The present performance is adequate for my expected near term
needs, particularly now that I have characterized the attenuator.
A marker circuit makes a signal that indicates when the sweep
generator's output corresponds to a predetermined frequency. In this
circuit, it makes a rectangular pulse that is centered on the
predetermined frequency, and this pulse is available to be viewed
directly on the "Marker Out" connector with an oscilloscope, or if
markers are "On" as toggled by the Marker On/Off toggle button, the
marker pulse is added to the blanking pulse to put a notch in the
output waveform. The circuit is composed of a a CD4051 analog
multiplexer to select which of two marker position pots will control
the circuit, a window comparitor made from both sections of U4, a dual
comparitor, and a current source, made of the two 2N4401 transistors,
which creates an offset between the high and low thresholds for the
When the saw tooth is more
positive than U4 Pin 6 and
less positive than U4 Pin 3, the output of window comparitor
U4 is high.
The width of the pulse is a fixed voltage, and this corresponds
fixed percentage of the maximum sweep range for any given band. The
width of the marker can be changed by changing the value of R49. A
variable width marker can be made by using a variable resistor instead
of a fixed resistor for R49. It would have been nice, but alas, the box
for this instrument is already very large, and I ran out of front panel
The offset across R49 is created by a constant current that is
generated by a current mirror made of two 2N4401 transistors. The
diode-connected transistor, the one with its collector connected to the
470k resistor, provides temperature compensation so that the voltage
across the emitter resistor of the other 2N4401 does not change much as
its base-emitter voltage changes as a function of temperature. The
current out of the 2N4401 on the right is, as far as this circuit is
concerned, independent of the voltage of its collector voltage. If the
current to generate the offset was generated with a resistor, the width
of the marker pulse would be different at low frequencies than it would
be at high frequencies because the current to R49 would not be constant.
When the sweep/function generator is in "Marker Mode" and the
oscillation frequency is controlled by one of the two marker pots, the
voltage fed to the VCO is midway between the lower and higher
thresholds of the window comparitor, making the marker centered on the
generator's output frequency while in "Marker Mode." The frequency
control voltage in the middle of the window is created by the voltage
divider made up of R47 and R48.
The U4 is an open collector comparitor, so the outputs can be safely
wired -ORed in this fashion.
used an AT90S1200A from Atmel as the interface between the pushbuttons
on the front panel and the circuits they control. It could have
been done with switches, but buttons seemed to be a slightly better
human interface. Since I used really cheap buttons, there is no tactile
feedback, so I used the remaining spare output of the controller to
make a small click whenever a button is pressed. In order for the
instrument to retain its settings when power is removed, the output
port state, which is controlled by the front panel buttons, is stored
in EEPROM. When three minutes
elapse after the last button press, the controller saves the state of
the output pins to its on-chip EEPROM and emits a slightly longer chirp
than is used for the button clicks. Storing the output state takes one
of the 64 available bytes, and each is used in turn, so the 100,000
write cycles guaranteed on the data sheet is extended to 6,400,000
cycles. At three minutes per cycle, the life of the EEPROM would
be a minimum of 300,000 hours, if I were to stand there, pushing the
button every 3 minutes. So, I am not worried about wearing out
Here is how the EEPROM read and write routines work. The assumption is
that the EEPROM starts out filled with zeros, which will be done
automatically by the firmware if it encounters an EEPROM without any
locations set to zero, as is the case when the EEPROM is erased during
the programming procedure, which sets all EEPROM locations to $FF. The
EEPROM can also be zeroed by pressing the Waveform Change Button and
On/Off Button at the same time while the instrument is running.
There should be no reason to manually zero the EEPROM -the manual
zeroing routine was written before I realized that erasing the EERPOM
during programming would result in the same effect.
The output state data is written by the "WriteNextEE" routine. The
routine scans the EEPROM memory from location zero up toward location
63 and writes the data into the first memory location it finds with a
content of $00. When it writes the byte, it sets bit 6 high so that it
will never write a zero value. If the search for a blank location wraps
around to location 0, then the entire EEPROM is erased by writing zeros
to each location.
The routine, "ReadNextEE" scans the EEPROM contents from location 63
toward zero, and returns the first nonzero value it finds. If it fails
to find a nonzero byte, it returns a default value.
The clicks and chirps are emitted as a short bursts of about 600 Hz
through a piezoelectric transducer that is capactivitely coupled to
bit 6 on port D.
All the button read and toggle routines use debounce routines. I have
an old Weller constant temperature soldering iron on my bench, and
whenever it switches on or off, it makes a huge glitch. When
using a 30 millisecond debounce time, sometimes the soldering iron
would case the sweep/function generator to chance states. As a result,
the debounce delay is now about 50 milliseconds and the problem of
spontaneous changes to control settings appears to be gone.
An ATtiny2313 can also be used, The ATtiny2313 version of the
code was changed by adding code to to
initialize the RAM stack and the specified include file to the
ATtiny2313 include file. Set the clock fuses to use the internal
8 MHz clock
and enable clock division by 8 to get a 1 MHz clock for the CPU. What
came up months later, while re-using part of code, is that the
AT90S2313/Tiny2313 needs to have the EEPROM write enabled prior to the
write strobe. This line [ sbi EECR,EEMWE
;Set master write enable.] was
added to the assembler source file on March 4, 2006. AT90S2313 and
ATtiny2313 chips programmed with earlier source and hex files do not
save settings to the EEPROM. The code with this change has not been
The power supply was designed to provide a balanced +5V and - 5V from a
wall-mounted DC supply that provides 12 VDC minimum. There was not
enough voltage available to use any of the three terminal regulators I
have access to, so I designed one around the TL431 voltage regulator,
used here as a combination voltage reference and error amplifier. It
drives the 2N7000 which in turn drives the SPB0806P pass transistor to
make 10.0 VDC. The dropout voltage of this regulator is a couple
hundred millivolts at 100 milliamps. The 2N2907 provides over-current
protection. The LM358 driving the 2NSC2655 and 2NSA1020Y transistors
creates a ground by supplying the ground current necessary to keep the
supplies evenly split at +5V and -5V. The first section of the
LM358 serves no purpose and can be omitted, with pin 3 being connected
directly to the 7.32 k resistors. The two 7.32k resistors can be any
pair of 1% resistors with a resistance between 5k and about 50k. The
2NSC2655 and 2NSA1020Y transistors are small signal transistors that
are capable of dissipating a little more power than one typically
mounted in a to-92 case, such as a 2N222. Since the total power
dissipation is likely to be less than 250 mw, a 2N2222 and a 2N2907 can
be used here, though I did not try them.
This current imbalance supplied by the 2NSC2655 and 2NSA1020Y
transistors can be measured across the 47 ohm resistor. In the
function/sweep generator I built, the worst case offset current when
driving a 75 ohm load is 24 milliamps. When the output offset is turned
off, the current imbalance is only 5 milliamps.
The current drain can be measured across the 2.2 ohm current limit
sense resistor. In the function/sweep generator I built, the worst case
current is 116 milliamps.
It was critical that the output voltage be a high as possible so as to
obtain the maximum dynamic range in the output stage, yet not exceed
the +/- 5 Volt maximum power supply voltage specified for the Zetex
amplifier. To meet that goal, I made the 10 volt regulator adjustable.
The result is that the output voltage is +4.99 volts and - 4.98 volts.
Since the MAX038 chip is expensive and the ZXFY202N8 output amplifier
is a little delicate, I added over voltage limiting in the form of
shunt regulators to the outputs. The fear was that one of the power
supply rails would be accidentally shorted to ground during testing,
and that would dump the entire 10 volts across the other supply,
stressing and potentially destroying some of the semiconductors in the
circuit. I tested the shunt regulators by shorting each supply to
ground and watching the other power supply's voltage on a oscilloscope
- no problems. These tests were performed before the power supply was
attached to the rest of the circuit. No point in tempting the fates.
There is a reverse polarity diode across the power supply input, and an
input filter to reduce the magnitude of capacitively coupled current
spikes that might pass through the ZXFY202N8 output stage when plugging
the 12V power adapter into a 220V wall outlet while the function/sweep
generator's output is connected to a grounded circuit. A varistor is
also across the input just in case of line transients.
An extra measure of safety is given by reverse polarity protection
diodes on the main circuit board. See the main board schematic for
I suggest that you come up with your own parts placement, but to get
you started, here (below) is the placement of the chips and connectors
on the main circuit board. The Power Supply was assembled separately.
There is plenty of of extra space inside the cabinet. This is the
smallest off-the-shelf box that I could find that was large enough to
accommodate the front panel controls. All of the circuitry is
point-to-point hand wired. Connectors are used so that the boards can
be removed and worked on with minimum stress on the wiring harness (and
I apply that term loosely.)
Now that I have been using the function/sweep generator for about a
month, I can say that I am very pleased with it. It certainly makes the
'scope a lot more useful.
At a couple of points during the design, I wondered whether more than
one set of marker controls was really a good idea, and waivered about
adding them until I had cut the holes in the front pane. Now I am
convinced that having two markers are a good idea. For example, When
measuring the bandwidth of a filter, I centered the left marker to the
-3db point on the left side of the passband envelope, and the right
marker over the -3db point on the right side of the marker envelope,
and then switched to Marker Mode and measured the output frequency of
each marker. In another instance, I was able to keep the generator set
up to sweep over a certain frequency range, with one of the markers set
at 10 MHz as a reference, and and still use the other marker control to
vary the output frequency in Marker (non-sweep) Mode, and then return
to sweeping with the touch of a button, without having to set the pots
Another thing I wondered about was whether the control-per-function
approach to front panel design would really be better than the more
modern context dependent controls - controls that change function
depending upon what part of the operating menu you are in. The
control-per-function approach is definitely the easiest for work with.
It takes more panel space and it takes more controls, but it is much
faster to operate in that there is no need to consider what mode the
instrument is in before manipulating a control. Indeed, please notice
that the only indicators on the front panel are the power-on LED and
the mechanical markings on the controls themselves.
The range of the adjustable attenuator is about right. I am tempted to
add another output with a much higher voltage swing. With the output
unterminated, I can get over 3.5 volts peak-to-peak, plus when the
offset is taken into account, the output has a total swing of about 8
volts peak-to-peak (about ground) when unterminated. This is useful for
some things like driving small bipolar transistors and low threshold
FETs, but it would be nice to have this kind of range when terminated,
and sometimes 10 V P-P terminated would be useful.
When the CMOS 5 volt output is loaded, it puts glitches into the
grounds and output signal. The addition of ferrites at strategic places
did not noticeably effect these glitches. It appears that reworking the
grounds is the only solution. Since I am afraid of breaking one of the
many wires each time I remove the circuit board, and reworking the
grounds would require removing and replacing the board a dozen or more
times, I am not going to bother with this right now. I can probe the
CMOS output with a scope probe for sync purposes without inducing
glitches on the output.
After putting this much effort into designing and building the
function/waveform generator, and realizing that the old Wavetek
sweep/function generator that I use in my garage in Mesa, Arizona is
over 20 years old, I realized that I should keep a set of critical
replacement parts on hand, and so have assembled a spare parts kit and
schematic diagram and placed in inside the nearly empty enclosure, so
that in case of a failure, even 10 or 20 years from now, I can still
repair it. The kit contains some switches, the output buffer chip, and
the MAX038. Even if the special parts are no longer manufactured. This
leaves me wondering whether the microcontroller will hold its flash
memory contents that long. Check back at this web page in 2025 and see
if I've posted the answer.
Ocotober, 2010: I accidentally performed and experiment that proved
that the output of the sweep/function generator is not tolerant of
being connected to 240 VAC. Unfortuantely, I was not able to get the
board working with the spare and now obsolete ZXFY202N8 opamp, and so
built an output amplifier with dsicreet components. The new output
amplifier is described in this web page: A DC to 20 MHz Coax Driver Using
Contents ©2005, 2006, 200, 2008 and 2010 Richard Cappels All
First posted in June, 2005.
Modifications/corrections/additions: March 5, 2006, December 2007,
January 2008, October, 2010.
You can send email to me at
"(at)" with "@" before mailing.
presented on this page is for personal, nonprofit educational and
use only. This material (including object files) is copyrighted by
Cappels and may not be republished or used directly for commercial
For commercial license, click
and intellectual property notice
(Summary: No warranties, use these pages at your
own risk. You may use the information provided here for personal and
educational purposes but you may not republish or use this information
for any commercial purpose without explicit permission.) I neither
express nor imply any warranty for the quality, fitness for any
particular purpose or user, or freedom from patents or other
restrictions on the rights of use of any
software, firmware, hardware, design, service,information, or advice
mentioned,or made reference to in these pages. By utilizing or relying
on software, firmware, hardware, design, service,information, or advice
provided, mentioned, or made reference to in these pages, the user
takes responsibility to assume all risk and associated with said
activity and hold Richard Cappels harmless in the event of any loss or
expense associated with said activity. The contents of this web site,
unless otherwise noted, is copyrighted by Richard
Cappels. Use of information presented on this site for personal,
educational and noncommercial use is encouraged, but unless explicitly
with respect to particular material, the material itself may not be
or used directly for commercial purposes. For the purposes of this
copying binary data resulting from program files, including assembly
code and object (hex) files into semiconductor memories for personal,
educational or other noncommercial use is not considered republishing.
desiring to use any material published in this pages for commercial
should contact the respective copyright holder(s).