MAPPER .. A DX MAP DRAWING and Propagation Program
for IBM PC Compatibles with graphics capability.
Dennis P. Murray
11165 McDonald Street
Culver City, Ca. 90230
This program, written for BASIC compilers such as MICROSOFT QUICK
BASIC or BORLAND TURBO BASIC, displays a map of the world centered on
a user-selectable QTH, and does propagation predictions based upon a
modified MINIMUF method. It shows the regions of sunlight and darkness
around the world, and updates these regions automatically at user-
specified time intervals. It can also accept arbitrary times and dates
at the user option. The program accepts DXCC prefixes or
latitude/longitude values for the DX location, draws the path from the
home QTH to that location, and displays the range and azimuth from the
home QTH. The user can select either short or long paths. The sunspot
number used for propagation prediction can be changed either
temporarily, or be set as the new default value. The propagation
prediction gives the MUF (maximum usable frequency), LUF (lowest
usable frequency) based upon E-layer screening, and the minimum number
of F-layer hops for a 5 degree minimum launch angle.
This program is written for IBM PC compatible computers with an
EGA Graphics capability and color display. The source code provided
could be modified by the user to use other graphics displays supported
by your BASIC compiler. The program runs quite quickly on an AT clone
with a hard disk and 640k of RAM, but it might be a 'dog' on a floppy-
only machine because it must read some long files for the map data.
The author does not intend to support this software, but is
simply releasing it into the public domain for non-commercial use by
HAMS who know what they are doing with their computer. The BASIC
source code is included for that reason.
The author encourages the distribution of this program to anyone
who might find it useful, or onto bulletin boards which deal with HAM
radio or shortwave listening. Please make sure to include ALL the
required files in any uploading however. These files are:
1- MAPPER.BAS The Program Source Code
2- MAPPER.EXE the Q-BASIC v3.0 executable code
3- MAPPER.ATL An Atlas of DXCC countries and their
latitudes, longitudes, and DX prefix.
This is an ASCII file ,sorted by prefix,
which can be added onto by the user with
a word processor or text editor.
4- MAPPER.DEF A short file used to store some default
values used by the program.
5- MAPPER.SCR A large file which is used to store and
retrieve the screen data for a world map
centered on the user's location. This
file is rewritten whenever the user
changes the 'Home' location. ( It is
interesting to view the world as seen
from DX locations.) This data is read
into a large array in memory to permit
rapid redrawing of the map as the sun
moves. The file is written into the
integer array NSTORE by BLOAD and BSAVE
commands. Because the program uses a lot
of memory to speed things up, this array
is DYNAMIC and does not generally reside
in the normal BASIC data segment. The
version of the program supplied for
Q-BASIC uses the CALL PTR86 subroutine
supplied by MICROSOFT, and this module
must be specified during the linking
process. In TURBO-BASIC the VARSEG
command can be used to find the array
segment used in lines 2020 and 12140.
6- MAPPER.DOC This instruction file.
7- WORLDMAP.DAT A large ASCII file containing the
lat/lon of the world's borders. This is
used to recompute the map whenever the
map center point is redefined.
To run this program simply enter 'MAPPER'. After an initial
message explaining the program is displayed, and you press any key to
proceed, you will be presented with a 3-choice initial menu which
allows you to change the default values of sunspot number, Home QTH
latitude and longitude, or the time interval at which the
daylight/darkness areas are redrawn. Pressing the appropriate number
key will put up prompts to allow changes to these variables, and will
return you to this menu after a change is entered. Pressing
the menu prompt will store these new values in the MAPPER.DEF file and
proceed on to the map drawing.
The map drawing will first put up a blank box, then calculate the
position of the sun at the time and date currently held by the DOS,
draw the solar terminator ( it looks like a satellite ground trace ),
and color the sun-lit portions of the world in red. It will then go on
to draw the country boundaries, color the oceans blue, and color the
USA green. The land areas which are in darkness will show up in black.
The program may miss coloring part of the oceans blue because of the
position of the solar terminator blocking the PAINT commands used in
the subroutine at line 8000 ... . I got tired of adding ocean points
to this routine to cover all the contingencies.
After the map is drawn the Main Menu will appear on the left of
the screen, with 8 choices:
1- Select DX Prefix.
This is the default choice (
it. ). You will be prompted to enter a DX prefix ( eg.
ZS for S. Africa ). The program will then search the
DX atlas for an occurrence of this prefix. It will
display all of the entries ( ie ZS1,ZS2,... ) that
contain this string and ask you to select one. If the
number of candidate entries is large you can simply
When a selection is made the program will fetch
the location of the prefix, make a propagation
prediction for the currently selected date and time,
draw the path from your QTH to that location, and
display sundry useful information at the top of the
Same as the above option except you will be
prompted to enter the latitude and longitude of the
desired DX location.
3-Change Sunspot Number.
Prompts for a new value of sunspot number. The
program will use this new value until it is changed
again during this session, but it will not change the
value in the default file that is read when the
Prompts for a new date and time to be used to
calculate solar terminator and make propagation
prompts will fetch the current DOS value of date or
time. This option will also turn off the automatic
updating of the terminator and map redraw.
5-Use Real Time.
This option will reset the above option to the
real ( DOS ) date and time and enable the auto update
6-Select Short Path.
This toggles the path from the long path option
back to short path.
7-Select Long Path.
This option toggles long path calculations.
Exits the program and returns you to DOS.
The program is entirely menu-driven so you don't have to remember
any special commands to use it.
Some Technical Information:
The propagation is based upon the MINIMUF method, but with some
modifications of the author.
1-I limit the ground range per F-layer hop to 3500km. This keeps
the minimum elevation angle to about 5 deg. for F-layer heights
of 300km. It is a rare HAM who has a high enough antenna or good
enough ground screen to get much energy below 5 degrees. For
those souls who want to be optimistic you can change line 40030
to some longer range per hop.
2-Rather than use the standard MINIMUF method of only looking at
the first and last ionospheric bounce points ( the two control
point method ), I calculate the propagation at every hop and
select the worst-case condition out of all of them. This results
in generally much more pessimistic MUF and LUF estimates than
3- I have included the E-layer screening frequency and lowest-
usable frequency ( LUF ) estimation technique given in chapter 4
of 'Amateur Radio Software ', by John Morris GM4ANB , RSGB
Books, Lambda House, Cranborne Road, Potters Bar, Hertfordshire
EN6 3JW. The subroutine starting at line 45000 contains this
4-I have used what apparently is the HAM convention for longitudes
being positive-West for the input and output in this program, in
the MIMIMUF subroutine, and in the DX Atlas file MAPPER.ATL.
However, in the internals of the program I immediately reverse
the sign of the longitude. Being an engineer by training I think
in terms of right-handed coordinate systems! Therefore those who
want to modify the program should be wary of the sign of the
longitude being used.
5-Note that I have changed the names of the variables in the
MINIMUF subroutine from the standard values to names which are
descriptive of what the variable actually is.