home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Best of German Only 1
/
romside_best_of_german_only_1.iso
/
anwender
/
sim
/
sim51_04.arj
/
BASIC52.DOC
< prev
next >
Wrap
Text File
|
1992-12-31
|
5KB
|
107 lines
Im 8052 AH besitzt ein internes EPROM. Darin befindet sich ab Her-
steller schon ein Programm: ein BASIC-Interpreter.
Simulation von BASIC52 auf SIM51.EXE:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Eine Simulation von BASIC auf dem SIM51 gibt natürlich nicht viel
Sinn, da BASIC52 nicht mehr getestet zu werden braucht. BASIC auf
dem SIM51 kann jedoch gut eingesetzt werden, um die Funktion von
SIM51 zu veranschaulichen und wurde von mir zum Test verwendet.
BASIC52 prüft zunächst die Größe des installierten externen RAM's
(XDATA). Dazu schreibt es einen Wert ins externe RAM und ließt ihn
anschließend wieder zurück. Für 64 kByte dauert dies lang. BASIC52
benötigt mindestens 2 kByte externes RAM. Sinnvoll wird SIM51 auf
2 kByte RAM konfiguriert (siehe F6-Fenster: RAM für 800h ...0FFFFh
Festwert #0FFh setzen).
Nach dem Laden und Start von BASIC52 mit Go wird SIM51 bei einem
Schreibversuch auf XDATA 800h anhalten und einen Fehler melden.
Dies ist korrekt und so gewollt. Man quittiert mit ESC, und SIM51
macht weiter mit execute.
Bei CODE 421h beginnt bei BASIC52 eine Routine, die auf den Em-
pfang des Space-Zeichens von der serielle Schnittstelle wartet (in
der Praxis muß der Anwender an seinem Terminal die SPACE drücken).
BASIC wartet hier, bis RxD (Port 3.0) low wird. Damit beginnt das
Startflag des UART. BASIC zählt die Zeit (Zykluszahl) für die RxD
───┐ SPACE = 20h, send LSB first ┌─────┐ ┌─────
└───────────────────────────────────┘ └───────────┘
|Start| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |Stop
low bleibt. Damit hat man die Zeit für die Übertragung von 6 Bit.
Dieser Wert dient als Vorladewert für die Baudrate (Timer 2).
Hier ist SIM51 anzuhalten (F5 drücken), und "drüber zu lupfen".
Für den Vorladewert ist von Hand ein geeigneter Wert einzutragen.
Danach kann wieder gestartet werden.
Beispiel Befehlsfolge zum Start von BASIC52 auf SIM51:
SIM51 ; Programmaufruf von DOS-Prompt
m 52 ; auf 8052 umschalten
[F6] ; Memory-Konfiguration
0800 ... FFFF -> #FF ; nur XDATA 000..7FFh aktiv
[F6] ; zurück
[F7] [F2] [F7] ; Terminal-Emulation wählen
[Alt-T] ; Terminal-Fenster einblenden
l basic52.abs ; BASIC laden
g , 421 ; Start, Go bis CODE 421h
[Alt-D] [Up]...[Up] FD ; RCAP2L = #0FDh setzen (ergibt maxi-
{CR} ; male Baudrate = 125 kBit/s mit der
; BASIC läuft). zurück mit {CR}.
g 437 ; weiter ab CODE 437h, Go forever
BASIC52 meldet sich sodann. Solange SIM51 sich im Run-Modus befin-
det, können über die Tastatur Zeichen eingegeben werden, die em-
fangen werden, als ob sie vom einem Terminal kämen.
Diese Befehlsfolge kann auch abgespeichert werden, und SIM51 damit
gestartet werden (Auto-Keystroke: siehe Befehl xT, xW file). Genau
das wurde in den File basic52.key getan. Zum Auto-Start ist einzu-
geben:
SIM51 @basic52.key
Nach dem Start wie oben beschrieben befindet sich SIM51 im Zustand
* execute * . Gestoppt werden kann mit [F5]. Es können aber auch
BASIC Befehle über die Tastatur eingegeben werden. Beispiel:
PRINT 4 - 5
PRINT 3 * 2
Disassemblieren von BASIC52 mit DIS51.EXE:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Der Disassembler kann aufgerufen werden mit DIS51 BASIC52.ABS. Da
BASIC52 für eine 8052 CPU geschrieben ist, ist es besser, die 8052
SFR-Definitionen einzublenden.
Zusätzlich sind alle bekannten Einsprungadressen anzugeben. Dies
sind:
der Reset und die Interrupt-Einsprünge für INT0, INT1,
Timer0, Timer1, Timer2 und die serielle Schnittstelle.
Da BASIC52 intern indirekte Sprünge verwendet (JMP @A+DPTR) blei-
ben nach einem ersten Durchlauf von DIS51.EXE einige Code-Bereiche
unübersetzt. DIS52.EXE muß wiederholt gestartet werden, wenn noch
zusätzliche Einsprungadresse gefunden sind.
Meißt ist dies durch ein bischen Kombinieren bei den JMP @A+DPTR
Befehlen leicht herauszufinden. Zu beachten ist, das indirekte
Sprünge auch über PUSH einer Sprungadresse auf den Stack und ein
anschließendes RET erfolgen können.
Der File BASIC52.DIN enthält schon einige Einsprungadressen von
BASIC52. Damit kann der Disassembler wie flogt gestartet werden:
A:\DIS51 @A:\BASIC52.DIN
Der Aufruf von DIS51 hat von der Festplatte aus zu erfolgen, da
der Output-File BASIC52.D51 auf der Disk keinen Platz mehr hätte.