problem? Any subroutine call in the address range $B000 to $FF00
probably also has an equivalent In the VIC, but it's at a different
address. This is where External Relinker comes in. External Relinker
will find such subroutine calls end replace them with the
corresponding C64 ROM routine calls - if we can identify the correct
replacement (this is where the published ROM maps come in). If we
already have a correspondence table constructed in an earlier session
with External Relinker, we simply load it using the load command. But,
if we don't have a table, External Relinker will use our answers to
its queries to construct one we may have for future use. For the
present example, suppose we have no table, just two ROM maps. We want
to construct a table starting at $1000, so we start it by entering
four zeroes (four zeroes denote the last entry in the table) using the
Fill Memory Block command.
F 1000 1003 00
Then we start External Relinker:
E 1200 13FF 1000 B000 FF00
The first two parameters tell External Relinker where the start and
end of the program we are working on are. The third says where the
correspondence table starts. The last two give the address range we're
interested in relinking. At this point External Relinker will start
disassembling our program in from $1200 to $13FF, looking for
references to addresses in the specified range of $8000 to $FF00. When
it finds such an address it will first consult the correspondence
table which starts at $1000. If no entry for the address is found, it
will show the disassembled line containing the unknown address and
wait for the entry of the correspondence address. We will look up the
PET address in the published table, find its equivalent in the C64
table, type the VIC address over the one on the screen, and press
RETURN. HESMON will add the new correspondence to its table, alter the
address reference in the program and then continue its search. On
subsequent occurrences of this address HESMON will automatically make
the specified replacement.
F - Fill Memory Block
This command is used to Set a section of memory to a particular value.
The syntax is as foltows:
F 1111 2222 33
where 1111 and 2222 are the first and last addresses (inclusive) of
the section to be filled and 33 the hexadecimal quantity to be
written. See, for example, the usage in the example of External
Relinker.
G - Go (execute program)
This command transfers control of the C64 to a M.L. program; that is,
it starts execution of the M.L. program. It may be used with or
without an address parameter. If no address parameter is given,
execution is begun at the address shown in the program counter (PC) of
the Register Display command. For example you may exit HESMON and
'warm start' BASIC by typing:
G A414
The C64 will respond, "READY.". For another example, see Section 1.
H - Hunt for a Sequence
This command locates a specific sequence of bytes in memory. It has
two forms, as follow:
H 1111 2222 33 44 55....
H 1111 2222 "ABCDF"
where 1111, 2222 are the first and last addresses of the range of
memory to be searched and 33, 44, etc. are the hexadecimal byte(s) to
be found, separated by spaces. The second form allows the bytes to be
specified as characters enclosed by quotes. For example, to find all
subroutine calls to the character output routine (AB47) in the C64
ROM's we would type:
H A000 FFFF 20 47 AB
HESMON responds with a list of all such subroutine calls. Note that,
as usual, the low and then high order bytes of the address were
specified.
To find all occurrences of the string 'READY' (there is only one, at
$A378), we would type:
H A000 FFFF "READY"
I - Interpret Memory
This command displays the contents of memory as 'ASCII' characters. It
is similar to the Memory Display command except that it shows 32
characters per line. It may be used with either one or two parameters
and its output may be scrolled just as with the Disassemble command.
For example, to see the table of BASIC's keywords and error messages,
type:
I A000 A300
K.J. REVEALED TRILOGY PAGE [165] (C)1990 K.J.P.B.
<<previous page -