SMON

Aus C64-Wiki
Wechseln zu: Navigation, Suche
Baustelle
Sprache:englisch NACH Sprache:deutsch
Dieser Artikel ist vollständig nur in der englischsprachigen C64-Wiki.com unter EN:SMON zu finden. Hilf mit ihn zu übersetzen und zu verbessern !!!


SMON
Startbildschirm
Entwickler N. Mann, Dietrich Weineck
Verleger Markt & Technik Verlag
Release 1985
Plattform(en) C64, C128, VC-20
Genre Maschinensprachemonitor
Steuerung Icon tastatur.png
Medien Listing, Icon disk525.png
Sprache(n) Sprache:englisch
Information Erschien in mehreren Teilen als Listing zum Abtippen in der 64'er 1984/85

SMON ist ein simpler und einfacher Maschinensprachemonitor zum Assemblieren und Disassemblieren. Das Tool erschien in mehreren Teilen als Listing zum Abtippen in den ersten Ausgaben der Computerzeitschrift 64'er in den Jahren 1984/85. Später wurde SMON auch in Sonderheften und Büchern der 64'er bzw. im Markt & Technik Verlag erneut auf Diskette veröffentlicht. Zusätzlich erschien zeitgleich in der 64'er der damals berühmte Assembler-Kurs für Einsteiger: "Assembler ist keine Alchemie" (im Jahr 2004 wurde der komplette Kurs als Buch im skriptorium-Verlag wiederveröffentlicht).

Start[Bearbeiten]

Der Maschinenmonitor

Der etwa 4 KByte große Assembler SMON kann z.B. mit dem Befehlseingabe SYS 49152 (für SMON-Versionen ab der Speicheradresse $C000) gestartet werden. Anschließend färbt sich die Bildschirmfarbe komplett in blau um, und folgende Anzeige erscheint:

   PC  SR AC XR YR SP   NV-BDIZC
 ;C000 B0 C2 00 00 EE   10110000


Die Anzeigen, auch hier Registerzeile genannt, bedeuten dabei folgendes:

Alle Zahlen (bis auf das Statusregister) werden in hexadezimaler Form angezeigt.


Flags

Die Flags bedeuten (von High-Byte nach Low-Byte):[1]

Bits:  76543210 
Flags: NV-BDIZC
  • Bit 7: N (negative flag) - Zeigt bei mathematischen und logischen Operationen an, ob das Ergebnis negativ geworden ist (also gesetzt, wenn der Wert im Bereich $7F bis $FF liegt).
  • Bit 6: V (overflow flag) - Signalisiert den Überlauf bei mathematischen Operationen, wenn das Ergebnis den Wertebereich -128 bis +127 in der 2er-Komplementdarstellung verlassen hat.
  • Bit 5: - nicht benutzt, immer 0.
  • Bit 4: B (break flag) - markiert einen Interrupt der mittels eines BRK-Befehls ausgelöst wurde.
  • Bit 3: D (decimal mode flag) - Mathematische Operationen (Addieren/Subtrahieren) werden in BCD-Arithmetik ausgeführt.
  • Bit 2: I (interrupt disable flag) - Unterdrückt oder erlaubt IRQs.
  • Bit 1: Z (zero flag) - Ist gesetzt, sobald ein Ergebnis einer Operation 0 ergibt.
  • Bit 0: C (carry flag) - Dient als Übertrag bei mathematischen und logische Operationen, wenn diese den Wertebereich $00 bis $FF verlassen, um u.a. Mehr-Byte-Operationen zu realisieren.


Befehle[Bearbeiten]

SMON kennt die folgenden Befehle (eine deutschsprachige Anleitung ist bei infinite-loop.at zu finden):

Standard Modus - Maschinensprachemonitor[Bearbeiten]

A xxxx - Assemble

Assemble Code starting at xxxx. It is possible to use markers (a simple form of symbolic labels) in the form Mxx. A single X ends the assembly.

B xxxx yyyy - BASIC Data

Create BASIC Data lines for the memory contents from xxxx to yyyy. Note: Line-numbers start with 32000 (defined in ($C087/$C088). The maximal length of a created BASIC line is usually 80 character (the maximal length that can be edited with the C64 BASIC editor). If you want shorter lines (e.g. 72 characters, that are usually the limit for emails and news-postings) set $C9AE to the desired length -7 (e.g. 65 for 72 characters).

C xxxx yyyy zzzz aaaa bbbb - Convert Program

The memory block from xxxx to yyyy is moved to zzzz. All absolute addresses in the code between aaaa and bbbb that pointed into the moved range are adjusted.

D xxxx (yyyy) - Disassemble

Disassemble the program starting at xxxx (and ending at yyyy). Changes to the code are possible by overwriting the opcodes.

F aa bb cc ..., xxxx yyyy - Find Byte

Find all occurrences of the the Byte sequence aa bb cc ... in the memory range xxxx to yyyy. It is possible to specify some nibbles of the search pattern as don't-care by using the wildcard '*'. Note: Unlike most other SMON commands the Find commands are very picky about their syntax. There must be no space between the command name and the arguments given (exception: the Find Byte command requires exactly one space), and a comma before the range.

FAaaaa, xxxx yyyy - Find absolute Address

Find all references to the absolute address aaaa within the memory range xxxx to yyyy. Note that there is no space between FA and aaaa.

FRaaaa, xxxx yyyy - Find Relative

Find branch statements that points to address aaaa within the memory range xxxx to yyyy. Note that there is no space between FR and aaaa.

FTxxxx yyyy - Find Table

Find all tables in the memory range xxxx to yyyy. SMON defines a table as any information, that can not be disassembled.

FZaa, xxxx yyyy - Find Zero-Page

Find all references to the zero-page address aa within the memory range xxxx to yyyy. Note that there is no space between FZ and aa.

FIaa, xxxx yyyy - Find Immediate

Find all statements in the memory range from xxxx to yyyy, that use aa as immediate operand. Note that there is no space between FI and aa.

G (xxxx) - Go

Execute the machine program at xxxx or the current PC. If the code ends with RTS, SMON is terminated. To jump back to SMON after the code is executed, the program must end with BRK.

I xx - I/O Device

Select the I/O device for Load and Save. Common values for xx are 01 for tape or 08 to 0B for floppy devices.

K xxxx (yyyy) - Kontrolle (german, means inspecting)

Display the memory contents from xxxx to yyyy as ASCII characters. Changes are possible by overwriting the characters.

L "filename" (xxxx) - Load

Load a file from the standard I/O device (see command I - I/O Device) at the standard address or xxxx.

M xxxx (yyyy) - Memory Dump

Display the memory contents from xxxx to yyyy as hex values and ASCII characters. Changes are possible by overwriting the given hex values.

O xxxx yyyy zz - Occupy

Fill the memory range xxxx to yyyy with the value zz.

P xx - Printer

Select the device number for the printer. Valid values for xx are 04 and 05. To send the output of a command to the printer, the mnemonic for that command has to be written in upper case.

R - Register

Display the contents of the CPU registers. Changes are possible by overwriting the values.

S ("filename" xxxx yyyy) - Save

Save the memory contents from xxxx to yyyy to a file. If the file has been loaded using the command L then the parameters for save are optional.

TW (xxxx) - Trace Walk

Execute the code at xxxx (or current PC) in single-step mode. After every executed command, the contents of the registers is displayed and the system is halted until a key is pressed. Subroutines can be executed in real time by pressing 'J'.

TB xxxx yy - Trace Break

A break-point is set at address xxxx. When the code is later executed with Trace Quick (see below) the execution will be switched to single-step mode when the break-point is reached for the (yy+1)th time.

TQ (xxxx) - Trace Quick

Execute the code at xxxx (or current PC if omitted) in real time. When a break-point is encountered the execution is switched to single-step mode (see TW - Trace Walk).

TS xxxx (yyyy) - Trace Stop

Executes the code at xxxx in real time. Execution stops as soon the program reaches yyyy (works only in RAM!).

V xxxx yyyy zzzz aaaa bbbb - moVe addresses

All references to absolute addresses in the code between from aaaa and bbbb which are pointing into the range xxxx to yyyy are adjusted to the range starting at zzzz.

W xxxx yyyy zzzz - Write

Copy the memory contents between xxxx and yyyy to zzzz. No address or other transformations are performed. Works correctly even if source and destination range overlap.

= xxxx yyyy - Check Equality

The memory ranges starting at xxxx and yyyy are compared for equality. The address of the first different byte is displayed.

X - Exit SMON

Beendet SMON und es werden die herkömmlichen C64-(Start-)Farben wieder angezeigt. Ein erneuter Start ist mit dem richtigen SYS-Befehl möglich (z. B. SYS 49152 für die Version ab Speicheradresse $C000 ).


  • # num - Convert Decimal
    Dezimalzahlen in Hexadezimalzahlen umwandeln. Wenn die Zahl aus 8 Bits besteht, wird die Dualzahl ebenfalls angezeigt.
  • $ xxxx - Convert Hexadecimal
    Hexadezimalzahl xxxx in Dezimalzahl umwandeln. Wenn die Zahl xxxx aus 8 Bits besteht, wird die Dualzahl ebenfalls angezeigt.
  • % xxxxxxxx - Convert Binary
    Eine (8 Bit lange!) Dualzahl xxxxxxxx wird als Dezimal- und Hexadezimalzahl angezeigt.
  • ? xxxx + yyyy - Hexadecimal Addition or Subtraction
    Führt einfache Berechnungen aus: Zwei 16 bit Hexadezimalzahlen können addiert oder subtrahiert werden. Das Ergebnis wird angezeigt.


Diskettenmonitor[Bearbeiten]

Der Diskettenmonitor von SMON...
  • Z - Aufruf des Diskettenmonitors (ebenfalls auch aufrufbar mit Taste H) - Hierbei wechselt die Bildschirmrahmenfarbe nach gelb.
    SMON beistzt einen eingebauten Diskettenmonitor für das Diskettenlaufwerk mit der Geräteadresse #8. Um Probleme mit den Befehlen von SMON zu vermeiden, wird der Diskettenmonitor separat gestartet und beendet.
    Hinweis: Es ist nicht möglich ein anderes Peripherie-Gerät wie eine Mac-Festplatte oder eine Datasette als Geräteadresse #8 zu definieren und somit zu untersuchen!
    Hierbei sind nur die folgenden Befehle möglich:
  • R (tt ss) - Read Sector
    Liest Track tt und Sektor ss in den Speicher. Falls tt und ss fehlen, der nächste logische (nicht physikalisch vorhandene!) Sektor wird gelesen.
  • W (tt ss) - Write Sector
    Schreibt Track tt und Sektor ss auf eine Diskette. Falls tt und ss fehlen, werden die letzten Parameter vom letzten "Read Sector"-Befehl genutzt.
  • M - Memory Dump
    Zeigt einen Disketten-Sektor aus dem Speicher auf den Bildschirm an. The shift keys can be used to interrupt/continue the display process.
  • @ - Floppy Error Status
    Zeigt den Fehlermeldungskanal des Diskettenlaufwerks (Floppy) an. Falls kein Fehler aufgetreten ist, wird die Meldung 00, OK,00,00 angezeigt.
  • X - Verlässt den Diskettenmonitors (engl. eXit), Rückkehr zum SMON-Monitor, hierbei wird der Bildschirm wieder nach blau umgefärbt.


Weblinks[Bearbeiten]

WP-W11.png Wikipedia: Smon

Quellen[Bearbeiten]

  1. Magic Disk 64: "Assembler-Kurs Teil 3"; 03/1990