Von MCT wird auch der große Bruder vom Zwerg11a der Zwerg11plus verkauft. Er hat durch seinen externen Speicher von 32K Byte RAM und 32K Byte EEPROM sowie durch den Einsatz des 68HC24 zur Wiederherstellung der Ports C und D, die besten Voraussetzungen für den Test von Programmen die später im Spezial Bootstrap Mode laufen sollen. Beide Systeme sind auch über den "Elektronikladen.de" zu erhalten. Ein Testmonitor , der sich im EEPROM des Zwerg11plus befindet, simuliert dann im Expandet Mode die RAM-Schnittstellen zu den Interrupts wie im Spezial Bootstrap Mode. Nach RESET startet der Monitor auch ein Programm das dem Anfangslader des Spezial Bootstrap Mode entspricht. Es wartet aber nur 3 Sekunden auf eine Eingabe am Seriellen Interface, wenn keine erfolgt wird der eigentliche Monitor gestartet und sendet eine Startmeldung zum seriellem Interface:
MONI11m 03.06.2001 (c) MCT & TU-D
* For general help try h or ? at command prompt (:).
* You can also try h or ? for entries marked with (h), after invoking them.
:
Der Zwerg11plus kann durch die Integration des Bootladers immer im Expandet Mode bleiben und muß nicht ständig umgeschaltet werden. Dadurch ist auch der Einsatz des Entwicklungssystems von Rose aus dem Buch "Mikroprozessor 68HC11" anwendbar, wenn man über den 32K EEPROM noch einen 32K RAM lötet, der mit dem nicht negiertem A15 selektiert und von 1000 Hex bis 17ff Hex deselektiert wird . Diese Aufgabe erfüllt ein 74hc151 , der sich über dem 74hc00 auf dem EMU befindet. Der 74hc151 ist zwar eigentlich ein Multiplexer, aber jeder Multiplexer muß auch einen Dekoder enthalten, der in der angegebenen Schaltung zur Selektierung des 2. Speichers verwendet wird. Damit ist der grau hinterlegte RAM von 0000 bis 0fff und von 1800 bis 7fff aktiv und kollidiert nicht mit dem 68hc24, der auf dem EMU von 1000 bis 17ff aktiv ist. Mit beiden Baugruppen habe ich den Monitor getestet. Für die Arbeit mit dem Monitor eignet sich unter Windows am besten das "Hyper Terminal" von Hilgraeve . Folgende Funktionen werden durch den Monitor bereitgestellt, die nach der Eingabe von H am Doppelpunkt aufgelistet werden:
:h
--- RAM / EEPROM
--------------------------------------------------------------
Modify
(h) :M
(addr)
Display
:D (start) [end]
Fill
:F (start end byte)
Compare
:C (start1 end1 start2)
Move
:MO (start1 end1 start2)
Search
byte :SE (start end
byte)
HC11 EEPROM (h)
:WE (addr)
FlashEEPROM write :WF (start1
end1 start2)
--- REGISTER
------------------------------------------------------------------
Display register :R
Change register
:RA (v)|:RB (v)|:RC (v)|:RX (vv)|:RY (vv)|:RS (vv)|:RP (vv)
--- DEBUG
---------------------------------------------------------------------
Set
breakpoint :SB (addr)
Display breakpoint :DB
Clear breakpoint :CB
Trace
:T [addr]
Goto
:G [addr]
--- SPECIAL
-------------------------------------------------------------------
Load
s-records :L [addr]
Load BIN File
:O
(Load File at MCT 'OUT' Format)
System
Config :SY
Memory
Test :MT (start end)
Add two hex numbers :CA (nu1 nu2)
:
Folgende Einstellungen sind im Hyperterminal notwendig, um die obigen Meldungen zu sehen:
Hier muß die Schnittstelle ausgewählt werden, an der der Zwerg11plus mit einem Null-Modem Kabel angeschlossen ist. Die Einstellung der gewählten Schnittstelle erfolgt durch einen Klick auf "Configure" dann im folgenden Bild.
Weitere Einstellung sind dann noch auf der 3. Seite notwendig:
Damit kann nun die Arbeit mit dem Monitor beginnen. Das Assemblersystem erzeugt bei der Übersetzung ein File im S-Record Format von Motorola . Dieses File hat bei der verwendeten Software die Erweiterung *.sr und kann mit dem Terminal geladen werden. Dazu ist am Doppelpunkt des Monitor L und ENTER einzugeben. Das Laden des Files erfolgt dann am Hyper Terminal durch folgende Handlungen:
1. "Send Text File..." im Menu Transfer starten.
2. Zu ladendes File auswählen und dabei auf "All files" für den Dateityp wechseln. Durch Klicken auf "Öffnen" beginnt der Ladevorgang. Nach dem erfolgreichen Laden erscheint dann folgendes Bild auf dem Terminal:
:l
.
-ok-
:
Nun kann das Programm gestartet und getestet werden. Beim Laden des Files wird die Adresse im Endeblock des endiants.sr Files in das PC Register des Testmonitors geladen. Damit ist ein Start des Programms nur mit G und ENTER möglich. Die Startadresse des Programms (2000 Hex) kann natürlich trotzdem hinter G mit einem Leerzeichen getrennt eingegeben werden. Vor dem Start kann man auch noch die übergebene Adresse überprüfen, indem man alle CPU Register anzeigt. Das wird mit dem Kommando R und ENTER erreicht. Es erscheint folgende Meldung:
-ok-
:r
CCR ACCA ACCB IX IY
PC SP
D8 12 0C 0205 0040 2000 0449
2000 8E 00
50
..P
:
Der Inhalt aller Register wird angezeigt und auf der untersten Zeile steht der Operationscode des 1. Befehls auf Adresse 2000 Hex im RAM. Nun könnten noch Veränderungen im Speicher oder in den Registern mit den im Help angegebenen Kommandos vorgenommen werden und danach das Programm im Schritt (Kommando T) oder in Echtzeit (Kommando G) gestartet werden. Vor dem Start in Echtzeit kann auch noch ein Breakpoint gesetzt werden. Dazu ist es sinnvoll bei der Übersetzung auch ein Listfile (endiants.lst) mit zu erzeugen. Es folgt ein Auszug aus dem Listfile des eingelesenen Programmes:
file: endiants.a
6:
bss
7:
00000000 org $0000
8:
9: 0000
00000028 ds.w 40
10:
00000050 stack equ *
11:
12:
text
13:
00002000 org $2000
14:
15: 2000
8e0050 lds
#stack
16:
17: 2003
bd2039 jsr
sciini Initialisierung vom RS232
18: 2006
18ce2055 ldy
#sciput ASSIGN auf RS232 out
19:
20: 200a ce2103 loop
ldx #meld
21: 200d
bd20a0 jsr
puts Zeichenkette ausgeben
22:
23: 2010
bd2029 jsr test
24:
25: 2013
bd20a0 jsr
puts Zeichenkette ausgeben
26: 2016
bd204a jsr
sciget warten auf eine Eingabe
file: endiants.a
35: *
36: * Nur wenn Programm im RAM abgearbeitet wird
37: *
38: 2019
810d
cmpa #$0d ENTER
39: 201b
2707
beq moni
40: 201d
811b
cmpa #$1b ESC
41: 201f
26e9
bne loop
42: 2021
3f
swi
Rücksprung in MONI11m
43: 2022
20e6
bra loop
44: 2024
fefffe moni ldx
$fffe RESET-Vektor im Expandet Mode
45: 2027
6e00
jmp 0,x
46: *
47:
48: *
49: * Unterprogramm zur Testung des Endian
50:
51: 2029 ce2161
test ldx #little
52: 202c
fc2101 ldd
testda
53: 202f
f62101 ldab testda
54: 2032
11
cba
55: 2033
2603
bne lit
56: 2035
ce2174 ldx
#big
57: 2038 39
lit rts
Soll nun ein Breakpoint auf die Adresse gesetzt werden, wo das Unterprogramm "test" aufgerufen wird, dann muß das Kommando SB mit der Adresse 2010 Hex eingegeben werden und danach wird mit G und ENTER gestartet.
2000 8E 00
50
..P
:sb 2010
:g
Test auf Big- oder Little-Endian
================================
Der 68HC11 läuft mit:
swi-brk-irq
CCR ACCA ACCB IX IY
PC SP
D4 0C 0C 2103 2055 2010 0050
2010 BD 20
29
..)
:
Ab hier können nun die Befehle des UP im Einzelschritt mit dem
Kommando T und ENTER abgearbeitet werden:
2010 BD 20
29
..)
:t
swi-t-irq
CCR ACCA ACCB IX IY
PC SP
D4 0C 0C 2103 2055 2029 004E
2029 CE 21
61
.!a
:t
swi-t-irq
CCR ACCA ACCB IX IY
PC SP
D0 0C 0C 2161 2055 202C 004E
202C FC 21
01
.!.
:t
swi-t-irq
CCR ACCA ACCB IX IY
PC SP
D0 55 AA 2161 2055 202F 004E
202F F6 21
01
.!.
:t
swi-t-irq
CCR ACCA ACCB IX IY
PC SP
D0 55 55 2161 2055 2032 004E
2032
11
.
:t
swi-t-irq
CCR ACCA ACCB IX IY
PC SP
D4 55 55 2161 2055 2033 004E
2033 26
03
&.
:t
swi-t-irq
CCR ACCA ACCB IX IY
PC SP
D4 55 55 2161 2055 2035 004E
2035 CE 21
74
.!t
:t
swi-t-irq
CCR ACCA ACCB IX IY
PC SP
D0 55 55 2174 2055 2038 004E
2038
39
9
:t
swi-t-irq
CCR ACCA ACCB IX IY
PC SP
D0 55 55 2174 2055 2013 0050
2013 BD 20
A0
...
:
Es ist zu sehen wie am Ende des Unterprogrammes IX mit 2174 Hex, der
Adresse für die Zeichenkette BIG geladen wird. Diese Adresse wird
geladen, weil der Befehl CBA auf der Adresse 2032 eine Gleichheit (Z im
CCR ist gesetzt) von Register A und B
festgestellt hat. Nun kann man das Programm mit G und
ENTER weiter laufen lassen. Vorher kann der Breackpoint mit CB
und ENTER gelöscht werden. Wird nun am Terminal die
Leertaste betätigt, so wiederholt sich ständig die
Ausschrift. Bei Eingabe von ESC bleibt das Programm wieder im
Monitor
stehen, da der SWI Befehl auf der Adresse 2021 Hex angesprungen wird.
Wird im Programmlauf ENTER eingegeben, erfolgt ein Neustart
des Monitors.
2013 BD 20
A0
...
:cb
:g
big Endian
Test auf Big- oder Little-Endian
================================
Der 68HC11 läuft mit:
big Endian
Test auf Big- oder Little-Endian
================================
Der 68HC11 läuft mit:
big Endian
swi-irq
CCR ACCA ACCB IX IY
PC SP
D4 1B 55 2174 2055 2022 0050
2022 20
E6
..
:
Nach dem Erreichen dieses SWI-Befehls kann mit
G und ENTER einfach fortgesetzt werden.
Vorher kann erneut ein Breakpoint gesetzt werden.
Zum Test von Programmen im RAM können zusätzliche Befehle
sehr nützlich sein, die aber bei einer endgültigen
Übersetzung für den EEPROM wieder zu entfernen sind. Diese
Aufgabe kann bei dem verwendeten Assemblersystem durch IF Anweisungen
erleichtert werden. Die Anfangsadressse für das Programm wird beim
Systemstart in eine Systemvariable eingetragen, die dann bei der
Übersetzung mit IF Anweisungen geprüft werden kann. Damit
können Teile der Quelle nur dann übersetzt werden, wenn die
Startadresse im RAM auf Adresse 2000 Hex eingestellt ist. Alternativ
kann man auch bei anderen Startadressen Zeilen einfügen, die dann
nur bei einer Übersetzung für die ROM Adressen eingefügt
werden. Dies ist auch in der Quelle des Programms ENDIANTS.A in den folgenden Zeilen zu
sehen:
#if START_-2000
* Programm läuft nicht im RAM
bra loop
#else
*
* Nur wenn Programm im RAM abgearbeitet wird
*
cmpa #$0d
* ENTER
beq moni
cmpa #$1b
* ESC
bne loop
swi *
Rücksprung in MONI11m
bra loop
moni ldx $fffe * RESET-Vektor im
Expandet Mode
jmp 0,x
*
#endif
*
Die Systemvariable wird mit START_ abgefragt. Ist sie 2000, dann ist das Ergebnis in der IF Zeile Null und die Zeilen im ELSE Zweig werden übersetzt. Ist das Ergebnis in der IF Zeile nicht Null, dann werden die Zeilen Zwischen IF und ELSE übersetzt.
Für den Test sind häufig auch zusätzliche Ein- und Ausgaben erforderlich. Sind keine Ein- und Ausgaben über das serielle Interface für die endgültige Lösung notwendig, dann kann man dazu einige Dienstprogramme des Monitors verwenden. Dazu wurde am Ende des Speichers, vor der Interrupttabelle des Extendet Mode ein Sprungverteiler eingerichtet, der wichtige Unterprogramme zur Verfügung stellt. Die Einsprungadressen bleiben dadurch unverändert, wenn sich bei späteren Versionen des Monitors die tatsächlichen Adressen verschieben sollten. Die Adressen können durch das File Usr_rufe.icl in jedes Quellprogramm als INCLUDE eingefügt werden. Die Benutzung der Dienste ist im File Usr_tst0.a zu sehen. Die Einbindung der Dienste in einen Melodiegong ist auch im File MelgIF.pdf zu sehen.
Für die Einfügung von zusätzlichen Quellzeilen in die Programme, bei der Übersetzung auf Adresse 2000 Hex, sind einige Includequellen vorbereitet. In der 1. Gruppe befinden sich die Files, die zusätzliche Funktionen unter Verwendung der UserRufe des Monitors realisieren. In der 2. Gruppe werden diese Funktionen mit eigenständigen Programmen ausgeführt. In der 3. Gruppe befinden sich die Files, die grundsätzlich zur leichteren Programmtestung eingefügt werden können.
IF_eqmon.icl | Bereitstellung der Einsprungadressen für die UserRufe bei einer Übersetzung für Adresse 2000 Hex. |
IF_imon.icl | Initialisierung des Monitor bei der Arbeit im RAM. Es werden die Anfangseinstellungen zur Benutzung der Interrupts initialisiert |
IF_mtst.icl | Sprung in Monitor bei Eingabe von ESC oder Neustart des Monitor bei Eingabe von ENTER. |
IF_isci.icl | Initialisierung einer eigenständigen SCI Software unter Verwendung der MCT-Programme. |
IF_tst.icl | Wie IF_mtst aber mit den Programmen von MCT. |
IF_stkFF.icl | Stack wird auf Adresse 00FF Hex initialisiert, wenn das Programm für den EEPROM übersetzt wird. Bei Übersetzung auf Adresse 2000 Hex wird der Stack auf Adresse 1fff Hex eingestellt. |
IF_stkC3.icl | Wie vorher nur wird der Stack bei einer Übersetzung für den EEPROM auf Adresse 00C3 Hex initialisiert. |
IF_stack.icl | Bei Übersetzung für den EEPROM wird die Marke stack aus der Quelle verwendet. |
Veränderte und zusätzliche Files im MCT-System zur Benutzung der Variablen START_ |
|
Target.bat | Setzen der Systemvariablen start.11 wurde eingebaut. |
hc11.h | Der Aufruf von Bit.h wurde eingefügt. |
Bit.h | Da der Assembler keine binäre Darstellung ermöglicht werden 256 Macros für 8 Bit Werte bereitgestellt die mit einem "B" beginnen. Für den Hexa-dezimalen Wert 5A kann damit B01011010 geschrieben werden. |
Vorgefertigtes Quellprogramm für den Assembler von MCT |
|
Rahmen.a. | In das Quellfile sind einige der Testhilfe Files mit eingebunden. |
Monitorquellen: |
|
Moni11m.a. | Hauptquellprogramm (letzte Version vom 15.07.2004) |
Boot_ROM.icl | Include zur Simulation des Anfangsladers aus dem Spezial Bootstrap ROM. |
Datum.c | Include für Datum in der Startmeldung |
Moni11m.sr | Übersetztes Programm für die Adressen E000 bis FFFF Hex als S-Record. |
Moni11m.lst | Übersetzungsliste des Moni11m. |
Mini11m.a | Quelle eines kleinen Monitors für die 512 Byte internen EEPROM. |
Mini11m.h | Unterprogramme aus Mini11m die in kurzen Programmen für die 256 Byte RAM verwendet werden können. |
Mini11m.out | Übersetztes Programm als BIN File für B600 bis B7FD Hex im internen EEPROM. |
Mini11m.lst | Übersettzungsliste des Mini11m für nur 512 Byte |
Mini11e.a | Quelle eines kleinen Monitors für die 512 Byte internen RAM von HC11e Kontrollern. |
Mini11e.sr | Übersetztes Programm als S-Record Datei für 0000 bis 01ff Hex im internen RAM eines HC11e. |
Mini11e.lst | Übersettzungsliste des Mini11e für nur 512 Byte RAM |
Tool zum Start des 68hc11 Assembler durch einen Doppelklick auf die Quelldatei im Windows Explorer |
|
START11A.EXE | Zerlegt den vom Windows übergebenen Parameter in die Bestandteile Laufwerk, Pfad, Dateiname und Dateityp und übergibt sie der Datei |
6811.bat | in der der Aufruf des 68hc11 Assembler von MCT erfolgt. (Einbindung in das Kontextmenu von Windows.) |
Tools zur Erstellung und Bearbeitung der Quellfiles: |
|
Ul_do2ux.exe | Umwandlung der Umlaute eines DOS-Files in die ANSI-Kodierung. |
Ul_ux2do.exe | Umwandlung der Umlaute eines Win- oder Unix-Files in die DOS-Kodierung. |
Ul_ux.txt | Textfile mit allen Zeichen die von den beiden Programmen konvertiert werden. (Einbindung in das Kontextmenu von Windows.) |
date-f.exe | Erzeugen von Quellfiles mit dem aktuellen Datum auf C:\ |
date-f.bat | Beispiel zur Abfrage des Errorcode von "date-f.exe". |
Zurück zur Lehrveranstaltungsbeschreibung
Siegmar Schöne 15.07.2004