Skip to main content

THE TEMPELMANN MONITOR by Richard Karsmakers

Originally  published in ST NEWS Volume 1 Issue  4,  launched  on 
September 7th, 1986.

Recently,   Thomas  Tempelmann  (E.-L.-Kirchnerstraße  25,  D-2900 
Oldenburg,  West  Germany) has written a nice utility program  for 
the ST.  As some of you might know,  Thomas was very active on the 
Commodore  64 a while ago - he wrote some nice copy  programs.  We 
sure are glad to hear that yet another computer whizkid has joined 
the ST legions.
But now,  let's review the program.  It comes supplied in a folder 
with four items,  and it is public domain (at least,  versions 1.x 
are). Our version was version 1.3.

The  concept is simple:  he manipulated the routine that  normally 
prints  out the screen (on ALTERNATE+HELP),  so that is points  to 
his program - a machine language monitor.  It offers nice touches, 
like using wild cards and examining the whole memory.  Just  think 
about the possibilities: you can now enter a program in memory any 
time you want.  Some programs,  however,  disable this function. A 
few programs that do this: The Pawn and our Synth Samples.
After  pressing  ALTERNATE and  HELP  simultaneously,  the  screen 
blanks and the monitor starts up,  giving you some essential  data 
as  well  as  a "!" prompt.  This prompt lets you  know  that  the 
monitor  is waiting for a command line.  Below,  you will  find  a 
summary  of  all commands.  In that summary,  we  will  use  these 
conventions:

*  All values must be given in hexadecimal  notation,  unless  you 
   add "&", in which case you may use decimal notation.
*  <f> means first address, <e> means ending address.
*  <e> may also be replaced by: X<n>   (number of bytes)
                                Z<n>   (number of lines)
*  With  the commands M,  D and I you may  also replace <e>  by  a 
   point, which indicates endless display of memory.
*  As  address  is also  possible to specify  the  contents  of  a 
   specific register, like "! G ~A0".
*  It is also allowed to exchange an address for the variable "O", 
   that can be given a value through the "O" command (see below).
*  All listing  can be paused by pressing the SPACE  bar,  whereas 
   they may be stopped completely by pressing any other key.

Here is the list of commands:

  F1                   Switch to monitor work screen
  F2                   Switch to original screen
  M <f> <e>            Memory dump
  : <f> <w1> <w2>...   Save words <w1>-<w..> from address <f>
  D <f> <e>            Disassemble memory
  O <offs>             Set the variable "O" to the value <offs>
  C <f> <e> <d>        Copy <f>-<e>-2 to <d>-(<d>+(<e>-<f>))
  V <f> <e> <d>        Verify memory (compare)
  H <f> <e> <b1> <b2>..Hunts memory for  bytes  <b1>-<b..>.   The 
                       question mark may be used as wild card.
  H <f> <e> '<string>  Hunts memory for <string>. The question 
                       mark may be used as wild card.
  F <f> <e> <b1> <b2>..Fills memory with bytes (b1>-<b..>. The
                       question mark may be used as wild card.
  F <f> <e> '<string>  Fills memory with <string>. The question
                       mark may be used as a wild card.
  I <f> <e>            ASCII dump (Interrogate memory). Control
                       codes will be given in reverse.
  ' <f> <string>       Puts string in memory from address <f>

  B                    Indicates all breakpoints (BPs), with the
                       format <address>, <counter>, <standing>.
  B <n> <a> <c> <c0>   Sets BP number <n> to address <a>.
  B-                   Disables all BPs.
                       A note to Breakpoints: These are set when
                       leaving the monitor, if the Trace bit in
                       SR isn't set (if not, the Tracefunction
                       will trace the BPs).
  G <f>                Go. Leave the monitor and go on at the
                       address specified by <f>.
  GS <f>               Calls a Subroutine. This routine has to
                       end with RTS to assure return to the 
                       monitor!
  T+ (or T-)           Set Trace control mode on (or off). During
                       Trace, the following functions are
                       possible:
                       SPACE    Execute specified instruction
                       ESC      Leave Trace mode and enter the
                                monitor. Back with "!G"

                       T        Toggle T-flag of SR of processor.
                                This can also be done in normal
                                monitor mode, by "!R FT=1" or
                                "!R FT=0". Only when this flag is
                                set, the monitor will keep control
                                over the executed instructions
                       O        Turns of output and key input.
                                The program will continue, and has
                                to return to the monitor by a BP
                       A        Just like "O", but in this case
                                all functions are traced (inclu-
                                ding TRAP routines, etc.), since
                                the trace bit is set each time.
                                During disk operation, or when the
                                Interrupt mask is set to 7, the
                                instruction will not be traced,
                                because the trace bit isn't set
                       R        Turns off the input and output,
                                until a subprogram returns

Templemon also knows some quite advanced register operations,  for 
which we will use the following conventions:

*  Registers (<reg>) may be specified by D0,A7,SR,PC,SSP,USP, etc.
*  F is the same as SR
*  A7 represents either the SSP or USP; this depends on the S-bit
   of the SR (whether it is set or not)

  R                    Displays the register that was specified
                       with "R:".
  R <reg> = <l>        Sets <reg> to the value <l>.
  R: <reg1> <reg2>...  Sets up default Register diplay (e.g. for
                       Trace).
  R F<SR-Flag> = <v>   Sets SR-flag to <v> (either 0 or 1). An
                       example: "!R FC=1" sets the carry-flag.

  P                    Clears the screen
  Q                    Quits (Gemdos(0))

The following commands are added in version 1.3 onwards:

  S <filename>,<f> <e> Saves memory from <f> to <e>-1 in a file.
  P <filename>         Opens a protocol file. All output will then
                       be  sent to the screen,  but also  to  that 
                       file. Example: "P PRN:" will send all
                       output to screen, but also to the printer.
  PC                   Close protocol file.

Thomas  Tempelmann is currently working on a professional  version 
of this program,  on a ROM module.  If you want to receive a  full 
user  manual of the PD program,  as well as a 40 DM bonus  on  the 
purchase  of that professional version,  you should send DM 40  to 
him (to the address mentioned earlier in this article).
Please  note  that the program may only be spread  through  public 
domain if it is accompanied in a folder by a "read me"-file, and a 
program called "TRACE.TOS" as well as that's C-source file! It may 
be ordered through our public domain service (read all about  that 
in  the  article about our Reader's  Service,  elsewhere  in  this 
bulletin).

Disclaimer
The text of the articles is identical to the originals like they appeared in old ST NEWS issues. Please take into consideration that the author(s) was (were) a lot younger and less responsible back then. So bad jokes, bad English, youthful arrogance, insults, bravura, over-crediting and tastelessness should be taken with at least a grain of salt. Any contact and/or payment information, as well as deadlines/release dates of any kind should be regarded as outdated. Due to the fact that these pages are not actually contained in an Atari executable here, references to scroll texts, featured demo screens and hidden articles may also be irrelevant.