Topics / Index / Download source / Englisch

simbase: Simuliere einen Microprocessor Atmel / PIC / ...

Content (automatic)

Prozessortypen

Die Familie der Simulationsprogramme wird aus 2 Hauptquellen erzeugt: Alle diese Simulatoren simulieren nicht alle Instruktionen, ondern nur die, die ich gerade benötige.

Dateien

Gelesene Dateien (Vom Compiler/Linker oder vom Assembler)

name.bas : Das BASIC-Programm, das nach dem Start und nach jedem cont - Befehl interpretiert wird. - Darin sind auch die Voreinstellungen
name.LST : Ausgabe des Compilers/Linkers osder des Assemblers.
name.MAP : Symboltabelle des Linkers
name.HEX : Maschinencode, der auch von ponyprog an die Maschine gesendet werden kann.
name.KOM : Kommentare des Disassemblers

Geschriebene / erzeugt Dateien

name.JRN : Die Mitschrift aller manuell eingegebenen Befehle. Aus dieser Datei können mit einem Editor mit Kopieren/Einfügen Teile in das BASIC-Programm kopiert werden.
name.LOG : Die Mitschrift der Ausgaben.
SIMBASE.DBG : Debug-Ausgaben. Nützlich für den Programmierer der Simulation (Jürgen Herbert) - nicht für den Mikroprozessorprogrammierer.

Befehle

Befehle werden aus einem Befehlskommandowort und Parametern gebildet. Mehrere Befehle können in einer Zeile angegeben werden, wenn diese durch Doppelpunkt [:] getrennt sind. Die Befehle sind:

Aufruf

Der Aufruf erfogt von der Eingabeaufforderung (DOS-Box) oder shell mit einem Dateiname. Beispiel: sim84 name 
Dadurch werden folgende Dateien eingelesen:
Es werden zwei Protokolldateien geschrieben:

Sofort ausgeführte Befehle

Befehle werden nach der Eingabeaufforderung eingegeben. Die Befehlszeile wird durch [Enter] abgeschlossen. Die Befehle werden sofort ausgeführt. Die Eingabeaufforderung ist: Cmd :
Es gibt einen vorgeschlagenen Befehl, der durch [Enter] ausgeführt werden kann. Damit kann  z.B: der Einzelschrittbefehl durch einen einzigen Tastendruck wiederholt werden.
Beispiel:
Cmd :ss[Enter]
1 1=0086 movwf 6 ; 6 portb=0H
100 w=0H
6 portb=0H
1 tmr0=1H

Cmd [ss] :[Enter]
2 2=2807 goto 7H ; pc=6H 1 tmr0=2H

Cmd [ss] :

Start des BASIC-Programms

Das BASIC-Programm wird beim Start des Simulationsprogramms simatmel / sim84 automatisch von der .bas - Datei geladen und ausgeführt. Wenn das nicht gewünscht ist, dann sollte der erste Befehl des BASIC-Programms stop sein.

Label und Goto

Der Programmablauf  des BASIC-Programms kann durch den goto-Befehl geändert werden. Dafür muss irgendwo ein label-Befehl sehen.
Beispiel:
if b >= 24 then goto M0
a = 2
goto M1
label M0
a = 3
label M1

sym

Der Befehl sym zeigt alle BASIC-Variablen an. (Die Variablen des Programms des Zielprozessors werden durch den Befehl llab angezeigt)
Cmd :uint16_t zz
Cmd :sym
                  zz=uint16_t  [0] =0
Cmd :sint32_t tt
Cmd :uint8_t t[2]
Cmd :sym
                  zz=uint16_t  [0] =0
                  tt=sint32_t  [0] =0
                   t=uint8_t  [0][0] =0[1][0] =0
Cmd :

Die Befehle stop und cont zum Anhalten und Fortsetzen der Ausführung des BASIC-Programms

Die Ausführung des BASIC-Programms kann durch den Befehl stop angehalten werden. Die Ausführung kann durch den Befehl cont fortgesetzt werden.
Eine Alternative ist das Fortsetzen des BASIC-Programms im durch den Befehl bss (Basic single step).

BASIC Variable werden durch Typangabe definiert

Eine BASIC-Variable ist ein Platzhalter. Auch die internen Werte des Simulators können durch ihre Namen aufgerufen werden. Beispiel dafür wie pc und cy als variable benutzt werden:
Cmd :print pc,cy
0  0
Cmd :ss
0 0000__vectors__vector_default__eeprom_end C014 rjmp $00000015
rjmp $0015

Cmd [ss] :ss
2 0015 2411 eor r1,r1 ;
     PRE  sram[1,0001] aliasr1alias r[1,01] =0,00
          sram[1,0001] aliasr1alias r[1,01] =0,00
     POST sram[1,0001] aliasr1alias r[1,01] =0,00
          sram[95,005F] aliassreg Status Registeralias io[63,3F] =2,02

Cmd [ss] :print pc,cy
22  3
Cmd :


Definition
Die Typangaben für die Definition der BASIC-Variablen sind:
Alle Variablen können durch den Befehl sym angezeigt werden:
Beispiele:

Cmd :uint8_t t1
Cmd :sint32_t t2
Cmd :double tr
Cmd :t1 = 203
Cmd :t2 = -t1
Cmd :tr = 8.343+2
Cmd :sym
                  t1=uint8_t  [0] =203
                  t2=sint32_t  [0] =-203
                  tr=double  [0] =10.34300
Cmd :


Ausdrücke

Ausdrücke sind Terme, die einen Wert (und den dazugehörigen Datentyp) berechnen.
Ausdrücke können als argumente für Befehle verwendet werden.

Der Befehl set radix bestimmt, ob Konstanten imAusdruckj hexadezimal oder dezimal angegeben sind. decimale or hex.

Beispiel 1:
Cmd :t1 = 88
Cmd :di t1+40
080=0000H undefined

Weil t1 = 88 ist, ist der Ausdruck t1+40 = 128, und das ist hexadezimal 80:

Beispiel 2:
Cmd :double c1msec
Cmd :c1msec = 1000*f
Cmd :p c1msec
10000.000000


Dabei ist f die Prozessorfrequenzi in Hz. Die Anzahl der Zyklen pro Millisekunde wurde so berechnet.

Beispiel 3:
 print hex$(r16),hex$(34),hex$(5*16+6),hex$(100*200*200)
00 22 00000056 003D0900

Operatoren

Operatoren werden unter Berücksichtigung ihrer Bindungsebene interpretiert:

Funktionen

Funktionen können in Ausdrücken verwendet werden:
textv=hex$(zahl) Hexadezimaldarstellung
uint8_tv=ubm(addresse) Liest ein Byte aus dem Datenspeicher des Zielprozessors
sint8_tv=sbm(addresse) Liest ein Byte aus dem Datenspeicher des Zielprozessors
uint16_tv=uwm(addresse) Liest ein Wort aus dem Datenspeicher des Zielprozessors
sint16_tv=swm(addresse) Liest ein Wort aus dem Datenspeicher des Zielprozessors
uint32_tv=ulm(addresse) Liest ein Langes Wort aus dem Datenspeicher des Zielprozessors
floatv=fm(addresse) Liest eine Fließkommazahl (4 Bytes) aus dem Datenspeicher des Zielprozessors
doublev=fm(addresse) Liest ein Fließkommazahl (8 Bytes) aus dem Datenspeicher des Zielprozessors
textv=tm(addresse) Liest einen Textstring aus dem Datenspeicher des Zielprozessors
uint8_tv=ubm(addresse) (2007-04-14: geplant) Liest ein Byte aus dem Datenspeicher des Zielprozessors



Daten vom Zielprozessor lesen

Außer den unter #funktionen angegeben Speicherzugriffsfunktionen kann der Datenspeicher des Zielprozessors durch die Labels ausgelesen werden, die vom Kompiler in der .lst und .map-Datei hinterlegt sind.

Dabei wird der Datentyp durch Anhängen von . und einem nachfolgenden Buchstaben bestimmt:
Beispiel: hr1 sei ein Datenlabel des Zielprozessors. z.B. das float-Ergebnis einer Berechnung.

hr1.f = bresult
result_nan = 0
if (hr1.l & 0x7f800000L) == 0x7f800000 then if hr1.l & 0x007fffff then result_nan = 1


print p und lprint lp

Der Befehl print kann benutzt werden um die Ergebnisse von Ausdrücken anzuzeigen. lprint gibt in die log-Datei aus. Verschiedene Ausdrücke werden durch Semikola getrennt.

Beispiel:

Cmd :r28=45
Cmd :print r30;r28;r30
1  45  1
Cmd :p r28*r28
2025

Der Befehl text legt Zeichenketten an

Entspricht dem GAMBAS-Befehl DIM txtv1 As String
Zeichenketten können bis zu 127 Zeichen lang sein.

Beispiel:

text txtv1    ' Eine Zeichenkette für bis zu 80 Zeichen
text txtv2[4] ' Eine Zeichenkette für bis zu 4 Zeichen
text txterg
'
txtv1 = "abcdefg" ' assign a text string
txtv2 = "123456789"
txterg = txtv1 + txtv2
'
print "txtv1= ";txtv1;" txtv2= ";txtv2;" txterg= ";txterg
sym ' Alle Symbole anzeigen


Dadurch wird folgendes angezeigt:

txtv1= abcdefg txtv2= 1234 txterg= abcdefg1234
txtv1=text [0]*128 =[abcdefg]
txtv2=text [0]*5 =[1234]
txterg=text [0]*128 =[abcdefg1234]
x=uint16_t [0] =7
y=uint16_t [0] =9
z=uint16_t [0] =63

dump - Ein Stück Speicher anzeigen

Der Befehl dump erwartet 2 Argumente: Die Startadresse und die Endadresse.
Beispiel:
Cmd :d 0x18 0x23
0018 = 0 = 00 ;  0 = 00 ;  96 = 60 ;  0 = 00
001C = 95 = 5F ;  2 = 02 ;  0 = 00 ;  0 = 00
0020 = 0 = 00 ;  0 = 00 ;  0 = 00 ;  0 = 00

Hinweis
Die Eingabe erfolgt Hexadezimal statt dezimal, wenn vorher Set Radix

silentstep und singlestep ss - Eine Instruktion simulieren

Dieses Kommando führt eine Instruktion des zu simulierenden Mikroprozessors aus.

Beispeil: Ausführen,bis eine Bedingung erfüllt ist.

uint8_t sc

print "Starting"

label bis200
if cy > 200 then gobis At200
silentstep
goto bis200


label At200
print "I am at cycle 200"
end

history hi - Die mitgeschriebenen Befehle in einem Editorfenster aufrufen.

Alle eingegebenen Befehle werden in die Datei name.JRN mitgeschrieben. Der Befehl history oder hi öffnet ein Editorfenster, in dem diese Datei editiert werden kann.
In die log-Datei name.JRN werden geschrieben:

lasm l - Das Assemblerlisting anzeigen

Der Befehl lasm oder l zeigt Zeilen aus dem Assemblerlisting an. Dieser Befehl funktioniert nicht, wenn eine HEX oder BIN-Datei bearbeitet wird.

Beispiel:
 
Cmd :set radix hex
Cmd :l e,12

00000e b50c in rtmpl,TCNT1L ; Read 16 Bit Timer
00000f b51d in rtmph,TCNT1H
000010 1b02 sub rtmpl,rt1sl ; and subtract start value
000011 0b13 sbc rtmph,rt1sh ; rtiml,rtimh = elapsed time
Cmd :

disassemble di - com - Disassemblieren und Kommentieren

Der Befehl
dissassemble von bis
di von bis
Zeigt Assembler-Befehlskodes an.

Der Befehl:
com addrs
Weist einer Programmadresse einen Kommantar zu.

Beispiel:

Cmd :com 0x35
Comment for 35H ? here is the comment test text
ERROR :Komments changed, want to write back filename.kom ?
Press [Y]es [N]o Yes
Cmd :di 0x30 0x38
030=009BH movwf 1B
031=189BH btfsc 1B,1
032=151BH bsf 1B,2
033=3004H movlw 04
034=00A4H movwf 24
035=122BH bcf 2B,4 ;here is the comment test text
036=1005H bcf 05,0 ; PORTA
037=21F4H call 1F4
038=20C8H call 0C8

reg r - Register anzeigen

Beispiel:
Cmd :set r 16
set radix hex
Cmd :r4=10-2
Cmd :r 0 7
00 = 00H=  0 ;  00H=  0 ;  00H=  0 ;  00H=  0
04 = 0EH= 14 ;  00H=  0 ;  00H=  0 ;  00H=  0
Cmd :set r 10
set radix dec
Cmd :r4=10-2
Cmd :r 0 7
00 = 00H=  0 ;  00H=  0 ;  00H=  0 ;  00H=  0
04 = 08H=  8 ;  00H=  0 ;  00H=  0 ;  00H=  0
Cmd :r 32 35
20 = 00H=  0 ;  00H=  0 ;  00H=  0 ;  00H=  0
Cmd :r 96 99
60 = 00H=  0 ;  00H=  0 ;  00H=  0 ;  00H=  0
Cmd :

listlabel llab - Benannte Marken des Zielprozessors anzeigen

Der Befehl llab zeigt alle Marken an, die aus dem Listing bzw. der MAP-Datei gelesen wurden.
Der Befehl llab *bit* zeigt alle marken an, die die Zeichenkette "bit" enthalten. 

listlabelvalue vlab - Alle Marken anzeigen die einen bestimmten Wert haben.

Der Befehl vlab expression zeigt alle Marken, die aus dem Listing  bzw. der MAP-Datei gelesen wurden, und die den Wert expression haben.

breakpoint bp b - Haltepunkte im zu simulierenden Programm

Haltepunkte halten die Ausführung e des zu simulierenden Programms an, Haltepunkte halten nicht das BASIC-Programm an.
bp addrs : Setze einen Haltepunkt (ohne Bedingung, ohne Ausführungsbefehl) auf die Adresse ...
b
breakpoint Alle Haltepunkte anzeigen.
b n,var condition expr,action : Set Breakpoint number n. When the condition is met (var condition expr) then the action is executed.
n: Up bis NBreakPoint = 20 breakpoints can be set. The number reaches from 0 bis 19 The condition must
var == expr : The expression is calculated when the breakpoint is set. During execution after each step the breakpoint condition is checked.
action: The command which has bis be executed each time the breakpoint is reached. Examples are: b 5,pc==0x15
Here a breakpoint at condition variable pc equals 21 (hex:15) is set.
b 5,pc==loop
Here the label is used instead the adress as numerical value.
b 5,pc==loop:print hex$(17),hex$(16)
Here the label is used instead the adress as numerical value. bp - PC Breakpoints: the bp command is a shortcut bis set a pc breakpoint. Remember bis use 0x if the address is HEX
Example: Cmd :bp 0xe
Cmd :b
Breakpoints are :
0: pc == 14 EH loop:
Cmd :e
Executing ... haltet by breakpoint
Sbispped cy=14, pc=E
Cmd :

Assignment of expression bis a variable

destvar = expression : Fill a variable with a computed value
Example : pina = 3

pinb = pina * 2 + 0x1e
r 5:6
5 pina=3H 6 pinb=24H
print pina;pinb
3
36
See Expression