Verwendete Werkzeuge zum Test von 68HC11 Programmen

1. Der Testmonitor

Die vorgestellten Programme sind fast alle für einen 68HC11 im Spezial Bootstrap Mode vorbereitet. Ein Test in diesem Mode ist sehr schwierig, da nur 512 Byte EEPROM für das Programm und 256 Byte RAM für die Daten zur Verfügung stehen. Als Hardware wurde der Zwerg11a von MCT ausgewählt. Zum Zwerg11a wird von MCT ein Assemblersystem verkauft, das auch hier zum Einsatz kommt.

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:

Hyper Terminal Einstellungen

Hyper Terminal Einstellungen

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.

Hyper Terminal Einstellungen

Weitere Einstellung sind dann noch auf der 3. Seite notwendig:

Hyper Terminal Einstellungen

Hyper Terminal Einstellungen

Hyper Terminal Einstellungen

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:

Verwendung des Hyper Terminal

1. "Send Text File..." im Menu Transfer starten.

Verwendung des Hyper Terminal

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

CCR Register des 68hc11

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".

2. Motorola MC68HC11 Spezial Bootstrap Lader


Zurück zur Lehrveranstaltungsbeschreibung 

Siegmar Schöne 15.07.2004