M68000 System Simulator

1. Einleitung

Der M68000 System Simulator kann ein einfaches aber vollstäntiges 68000 System mit allen wichtigen Komponenten wie CPU, RAM, ROM und diversen IO Bausteinen simulieren. Darüber hinaus wird auch die bei üblichen Systemen vorhandene Glue-Logik, bestehend aus Adressdekoder und Interruptlogik simuliert.
 
Bei dem Konzept des Simulators wurde wenig Wert auf Bedienungskompfort gelegt, sondern eher auf eine schnelle Simulation eines vollständigen Systems. So verfügt der Simulator auch nur über ein sehr einfaches Komandozeile Benutzer Interface.

2. Installation

Der M68000 System Simulator besteht nur aus der ausführbaren Datei   s68  und einer Konfigurationsdatei   s68.conf.  Die ausführbare Datei s68 wird am besten nach /usr/local/bin kopiert und die Konfigurationsdatei kann im Home Verzeichnis oder in einem entsprechenden Arbeitsverzeichnis abgelegt werden.
Die Konfigurationsdatei beschreibt das zu simulierende M68000 System.
 
Je nachdem welche Komponenten in dem simulierten System noch vorhanden sein sollen ist noch ein Imagedatei mit dem Inhalt des EPROMs oder eine Imagedatei mit dem Festplatteninhalt der simulierten IDE Festplatte erforderlich.
 
Eine Installation mit allen Komponenten kann dann wie folgt aussehen:
/usr/local/bin/s68     Simulator
/home/foo/s68.conf     Konfigurationsdatei
/home/foo/rom.bin      Binärdatei mit EPROM Inhalt
/home/foo/master.img   Inhalt der simulierten IDE Festplatte

2.1 Konfigurationsdatei

Die Konfigurarionsdatei s68.conf (beim Starten des Simulators kann auch eine anderer Namen für die Konfigurationsdatei angegeben werden) beschreibt das zu simulierende M68000 System. Hier werden die einzelnen Bausteine im System mit Basisadresse und Größe des Adressbereichs und optional einem Interrupt Level und ein Argument für den Baustein angegeben. Des weiteren befinden sich in der Konfigurationsdatei noch Angaben über den Reset Vector und Kommandos die nach dem Start des Simulators abgearbeitet werden.
 
Dies ist ein Beispiel für eine Konfigurationdatei, eine Beschreibung folgt im Anschluß:
 
#
# s68 configuration file
#
#	device	base		size		irq	argument
#	------- ---------------	---------------	-------	------------------
DEVICE  RAM     0x00000000      0x00400000
DEVICE  EPROM   0x00e00000      0x00100000      0       mv.s3
DEVICE  M68681  0x00fe0000      0x1000          4	/dev/tty7
DEVICE  M68230  0x00fe1000      0x1000          5
DEVICE  MK48T02 0x00fe3000      0x1000
DEVICE  ATA     0x00fe2000      0x1000          0       img/master.img
RSTBASE	0x00e00000
#
COMMAND go
 
In der ersten Spalte befindet sich ein Keyword. Je nach Keyword folgen ein oder mehr Parameter. In der Version 1.1.0 sind die folgenden Keywords mit den entsprecheneden Bedeutungen gültig:
 
KeywordBedeutung
DEVICE Device Definition für Adress Decoder.
RSTBASEAdresse für Reset Vector
COMMANDKommandos (siehe Komandozeilen Interface)

Tabelle 1 : Bedeutung der Keywords

2.1.1 DEVICE Keyword

Das DEVICE Keyword in der Konfigurationsdatei dient zum Einstellen des Adressdecoders und der Interrupt Logik.
Dem Keyword folgt in der zweiten Spalte der Devicename. In der Version 1.1.0 des Simulators sind die folgenden Devicenamen bekannt: RAM, EPROM, M68681, M68230, MK48T02 und ATA.
Die dritte und vierte Spalte geben die Basisadress und die Größe des Adressbereich an. Die Basisadress muß dabei ein ganzzahliges Vielfaches der Größe sein. Es kann zu undefinierten Ergebnissen kommen wenn dies nicht der Fall ist.
In der fünften Spalte befindet sich der Interrupt Level. Löst der Baustein keinen Interrupt aus befindet sich 0 in der Spalte.
In der letzten Spalte befindet sich ein Eintrag der als Argument für den Baustein dient. Die Bedeutung hängt vom jeweiligen Bautein ab.
Die folgenden Tabelle zeigt die Bedeutung des Arguments:
 
KeywordArgument
RAM Kein Argument
EPROM Dateiname des Imagedatei
M68681 Devicename der Schnittstelle fü Port A
M68230 Kein Argument
M48T02 Kein Argument
ATA Dateiname der IDE Master Imagedatei

Tabelle 2 : Bedeutung des Arguments

2.1.2 RSTBASE Keyword

Mit dem RSTBASE Keyword wird die Basisadresse festgelegt von der der Initial Stackpointer und der Reset Vector gelesen werden.
Nach einem CPU Reset liest die CPU von der Adresse 0x000000 den Initial Stack Pointer und von der Adresse 0x000004 den Reset Vector. Wird nach dem Keyword RSTBASE z.B. die Bassisadresse des EPROMs angegeben dann wird während der ersten vier Lesezyklen (WORD) die Basisadresse des EPROMs zur Adresse addiert und der Initial Stack Pointer und der Reset Vector vom EPROM gelesen.

2.1.3 COMMAND Keyword

Hinter jedem COMMAND Keyword befindet sich ein Kommando des Komandozeilen Interfaces. Diese Kommandos werden noch vor der ersten Eingabeaufforderung abgearbeitet. So kann, wie in der Beispiel Konfigurationsdatei, mit dem go Kommando der Simulationsvorgang direkt nach dem Aufruf des Simulator gestartet werden.

3. Kommandozeilen User Interface

Über ein einfaches Kommandozeilen User Interface kann der M68000 System Simulator bedient werden. Zu den Möglichkeiten des Kommandozeilen User Interfaces gehören u.a. das Starten und Stoppen der Simulation, Anzeigen und Ändern der Register und des Speichers, sowie das Setzen und Löschen von Breakpoints.
Die folgende Tabelle zeigt die möglichen Kommandos der Version 1.1.0:
 

 he [<cmd>]               Print detailed help about command 
 ver                      Display version of simulator
 ex                       Exit MC68000 simulator
 br [<addr>]              Display or Set breakpoint
 nb [<addr>]              Clear all or one breakpoint
 md [<addr>] [<addr>]     Memory display
 mf <addr> <addr> <val>   Memory fill
 mm [<addr>]              Memory modify
 rd                       Register display
 rm <reg> <val>           Register modify
 go [<cnt>]               Execute <cnt> instructions
 tr [<cnt>]               Execute <cnt> instructions with tracing

Tabelle 3 : Kommandos des Kommandozeilen User Interface

Kommandos wie he, ver, ex oder rd sind selbsterklärend.
 
br ohne ein Argument zeigt die gesetzten Breakpoints an. Das nb Kommando ohne Argument löscht alle Breakpoints.
 
Das md Kommando ohne Argument zeigt 256 Byte ab der Adresse 0x0000 an. Mit dem Kommando mm kann der Inhalt der Adresse verändert werden. Ohne Argument kann man den Inhalt ab der Adresse 0x0000 verändern. Durch die Eingabe von <ENTER> gelangt man zur nächsten Adresse und durch die Eingabe von .<ENTER> wird der Memory Modify Modus verlassen
 
Mit dem Kommando rm kann der Inhalt der CPU Register verändert werden. Es können die Datenregister (d0, d1, ..., d7), die Adressregister (a0, a1, ..., a8), sowie der Programm Counter (pc) und das Status Register (sr) angegeben werden. Das Adressregister a7 ist dabei immer der User Stack Pointer und a8 ist immer der Supervisor Stack Pointer.
 
Mit dem go bzw. tr Kommando ohne Argument kann die Simulation für unendlich viele Instruktionen gestartet werden. Bei dem tr Kommando werden die simulierten Instruktionen angezeigt, was jedoch den Simulationsvorgang erheblich verlangsamt.
Durch die Eingabe von <ENTER> während der Simulation wird die Simulation unterbrochen und es können weitere Kommandos eingegeben werden. Die Simulation wird ebenfalls beim Erreichen eines Breakpoints unterbrochen.