Monitorprogramm µp-os 8052
            
 
 
 
 
Dokumentation des Monitorprogramms
µP-OS 8052
V 2.1
 
 
von
Roland Heinrich
User
Einstellungen für das Terminalprogramm
Terminaleinstellungen:
Terminalemulation:	VT52
Duplex-Modus:		voll
 
ASCII-Dateiversandt:
Zeichenverzögerung:	100ms
Zeilenverzögerung:	10ms
CR-Übersetzung:		keine
LF-Übersetzung:		keine
Befehle
Allgemeine Befehle
Befehl
 
Beschreibung
g xxxx
go
Programm ab Adresse xxxx starten
l xxxx
list
Programm ab Adresse xxxx auflisten (disassembliert)
bs xxxx
breakpoint set
Breakpoint auf Adresse xxxx setzten
bl
breakpoint list
Breakpoint-Adresse anzeigen
bd
breakpoint delete
Breakpoint-Adresse löschen
c
continue
Abgebrochenes Programm fortsetzen
o
options
Einstellungen ändern
r
reset
Software-Reset: Gesamter Speicher wird gelöscht und alle Einstellungen zurückgesetzt.
i
Intel-Hex
Programm-Datei im Intel-Hex-Format laden
xxxx ... beliebige Adresse im Hex-Format.
 Drückt man währen der Eingabe ESC, so wird der Befehl abgebrochen.
Befehle im Options-Menu
Befehl
 
Beschreibung
l xxxx
listlengh
 
s xx
seriall port
 
 
 
 
Verwendbare Monitor-Unterprogramme
Zeichenausgabe
Adresse
Name
Beschreibung
Verwendet
Verändert
3000h
CharOut
Gibt ein Zeichen, das sich im AKKU befindet, aus.
A
 
3003h
ReturnOut
Gibt ein Return (CR, LF) aus.
A
 
3006h
SpaceOut
Gibt so viele Leerzeichen aus, wie die Zahl im AKKU vorgibt.
A
A
3009h
CursorOut
Gibt einen Cursor-Befehl, der durch AKKU definiert ist, aus:
AKKU=00h ® Cursor hinauf
AKKU=01h ® Cursor hinunter
AKKU=02h ® Cursor nach rechts
AKKU=03h ® Cursor nach links
AKKU=04h ® Cursor auf Position 1/1 (links/oben)
AKKU=05h ® Cursor auf Position x/y
x ..
. Zeile (>0)
y ... Spalte (>0)
x, y müssen nach dem Unterprogrammaufruf zusätzlich mittels CharOut übertragen werden.
A, DPTR
A
300Ch
StrOut
Gibt eine Folge von Zeichen, die an der Speicheradresse im DPTR beginnen und mit dem Zeichen 00h enden, aus.
A, DPTR
DPTR
300Fh
HexNibOut
Gibt die erste 4 Bit im AKKU in Hex aus.
A, PSW
 
3012h
HexByteOut
Gibt die Zahl im AKKU in Hex aus.
A, PSW
 
3015h
HexWordOut
Gibt die Zahl im DPTR in Hex aus.
A, PSW, DPTR
 
3018h
BinBitOut
Gibt das C-Bit binär aus.
A, C
 
301Bh
BinBitOutACCU
Gibt das 1. Bit des AKKUs binär aus.
A, B
 
301Eh
BinByteOut
Gibt die Zahl im AKKU binär aus.
A, B
 
3021h
BinWordOut
Gibt die Zahl im DPTR binär aus.
A, B, DPTR
 
3024h
NumOut
Gibt die Zahl im AKKU in Dezimal aus.
A, B
 
 
Zeicheneingabe
Adresse
Name
Beschreibung
Verwendet
Verändert
3027h
CharInHide
Schreibt eingegebenes Zeichen in den AKKU
A
A
302Ah
CharIn
Wie CharInHide, nur wird das Zeichen auch ausgegeben.
A
A
302Dh
HexNibIn
Schreibt eingegebene Hex-Ziffer (0..
9, A..F) in den AKKU und gibt sie aus. Wird ESC eingegeben, so wird abgebrochen und C=1 und AKKU=0, sonst C=0.
A, PSW
A, PSW, C
3030h
HexByteIn
Wie HexNibIn, nur werden zwei Hex-Ziffern in den AKKU geschrieben.
A, B, PSW
A, PSW, C
3033h
HexWordIn
Wie HexNibIn, nur werden vier Hex-Ziffern in den DPTR geschrieben.
 Wird ESC eingegeben, so wird abgebrochen und C=1 und DPTR=0.
A, B, PSW, DPTR
PSW, DPTR, C
3036h
BinBitIn
Schreibt eingegebene Binärziffer (0..1) ins C-Bit und gibt sie aus.
A, C
C
3039h
BinBitInACCU
Schreibt eingegebene Binärziffer (0..
1) ins Bit 0 des AKKUs gibt sie aus. Wird ESC eingegeben, so wird abgebrochen und C=1.
A, C
ACC.0, C
303Ch
BinByteIn
Wie BinBitInACCU, nur werden 8 Ziffern in den AKKU geschrieben. Wird ESC eingegeben, so wird abgebrochen und C=1 und AKKU=0.
A, B, C
A, C
303Fh
BinWordIn
Wie in BinBitInACCU, nur werden 16 Ziffer in den DPTR geschrieben.
 Wird ESC eingegeben, so wird abgebrochen und C=1 und DPTR=0.
A, B, C, DPTR
DPTR, C
3042h
NumIn
Wie HexNibIn, nur wird eine Dezimal-Ziffer (0..9) eingelesen und in den AKKU geschrieben
A, PSW
A, PSW
Code
;***************************************
;** Monitorprogramm für 8051/2 EV-Kit **
;**                                   **
;** von  : Roland HEINRICH            **
;** Datum: 10.03.1997                 **
;***************************************
 
;****************
;** Konstanten **
;****************
 
DPTRSafe	XDATA		87EBh		;DPTR-Sicherungsadresse 2 Byte
ACCUSafe	XDATA		87EDh		;ACCU-Sicherungsadresse 1 Byte
PSWSafe		XDATA		87EEh		;PSW-Sicherungsadresse 1 Byte
SPSafe		XDATA		87EFh		;SP-Sicherungsadresse 1 Byte
IESafe		XDATA		87F0h		;IE-Sicherungsadresse 1 Byte
 
DPTR1Mem	XDATA		87F1h		;DPTR-Speicheradresse1 2 Byte
DPTR2Mem	XDATA		87F3h		;DPTR-Speicheradresse2 2 Byte
 
BreakPoint	XDATA		87F5h		;Breakpoint-Adresse 2 Byte
BreakAdr	XDATA		87F7h		;Break-Adresse 2 Byte
BreakMem	XDATA		87F9h		;Befehlssicherungsbereich für Breakpoint 3 Byte
BreakDone	XDATA		87FCh		;Anzeige ob BP in Programm eingesetzt 1 Byte
 
ListNum		XDATA		87FDh		;Adresse für Anzahl der Befehle bei List
Serielle	XDATA		87FEh		;Adresse für Einstellung der seriellen Schnittstelle
 
PinRegA		XDATA		0A002h		;Adresse des Pin-Registers des WSI-Ports A
DirRegA		XDATA		0A004h		;Adresse des Direction-Registers des WSI-Ports A
DataRegA	XDATA		0A006h		;Adresse des Daten-Registers des WSI-Ports A
 
Hauptprog	CODE		0050h		;Beginnadresse für Hauptprogramm
BreakProg	CODE		0A00h		;Beginnadresse für Break-Programm
Tabellen	CODE		1000h		;Beginnadresse für Tabellen
GlobSUB		CODE		3000h		;Beginnadresse für Globale Unterprogramme
 
BreakProgH	EQU		0Ah		;Beginnadresse für Break-Programm
BreakProgL	EQU		00h		;in High- und Low-Byte aufgeteilt
 
RDat		BIT		P1.
 
2		;Receive Eingang für serielle Schnittstelle
TDat		BIT		P1.3		;Transmit Ausgang für serielle Schnittstelle
 
;******************
;** Programmcode **
;******************
 
ORG 0000h
	JMP Haupt				;Sprung zum Programmbeginn
 
;**************************
;** Interrupts verbiegen **
;**************************
 
ORG 0003h
	JMP 8003h				;External Interrupt 0
 
ORG 000Bh
	JMP 800Bh				;Timer 0 Overflow Interrupt
 
ORG 0013h
	JMP 8013h				;External Interrupt 1
 
ORG 001Bh
	JMP 801Bh				;Timer 1 Overflow Interrupt
 
ORG 0023h
	JMP 8023h				;Serial Interrupt
 
ORG 002Bh
	JMP 802Bh				;Timer 2 Overflow / External Reload Interrupt
 
;*******************
;** Hauptprogramm **
;*******************
 
ORG Hauptprog
Haupt:
	MOV DPTR,#BreakDone			;BreakDone-Byte -> ACCU
	MOVX A,@DPTR
	JZ Haupt1				;Wenn BreakDone nicht aktiviert -> JMP Haupt1
	CALL ClrBreak
Haupt1:
	MOV DPTR,#0000h
	CALL StoreBreak			;DPTR -> Break-Adresse = Break-Adresse löschen
	MOV DPTR,#Serielle
	MOVX A,@DPTR
	CJNE A,#01,Haupt2			;Wenn Serielle=01h -> PA für Schnittstelle 								initialisieren
	MOV DPTR,#DirRegA
	MOVX A,@DPTR
	CLR ACC.0				;PA.0 -> Input
	SETB ACC.1				;PA.1 -> Output
	MOVX @DPTR,A
	JMP Haupt4
Haupt2:
	CJNE A,#02h,Haupt3			;Wenn Serielle=02h -> serielle Schnittstelle 							initialisieren
	CALL SeriellInit
	JMP Haupt4
Haupt3:
	CLR A
	MOVX @DPTR,A
Haupt4:
	MOV DPTR,#ResetStr			;Reset-Meldung ausgeben
	CALL StrOut
Beginn:
	CALL ReturnOut
	MOV DPTR,#EingabeStr
	CALL StrOut
Loop1:
	CALL CharInHide			;auf Eingabe warten, Zeichen -> ACCU
	CJNE A,#62h,Loop2			;Wenn Zeichen="b" -> Breakpoint ändern
	CALL CharOut
	CALL BreakCh
	JMP Beginn
Loop2:
	CJNE A,#63h,Loop3			;Wenn Zeichen="c" -> Programm fortsetzen
	CALL CharOut
	CALL Continue
	JMP Beginn
Loop3:
	CJNE A,#67h,Loop4			;Wenn Zeichen="g" -> Programm starten
	CALL CharOut
	CALL Go
	JMP Beginn
Loop4:
	CJNE A,#68h,Loop5			;Wenn Zeichen="h" -> Help ausgeben
	CALL CharOut
	MOV DPTR,#HelpStr
	CALL StrOut
	JMP Beginn
Loop5:
	CJNE A,#69h,Loop6			;Wenn Zeichen="i" -> IntelHex-Eingabe
	CALL CharOut
	CALL IntelHexIn
	JMP  Beginn
Loop6:
	CJNE A,#6Ch,Loop7			;Wenn Zeichen="l" -> Befehlslisting
	CALL CharOut
	CALL List
	JMP Beginn
Loop7:
	CJNE A,#6Fh,Loop8			;Wenn Zeichen="o" -> Optionen ändern
	CALL CharOut
	CALL Options
	JMP Beginn
Loop8:
	CJNE A,#72h,Loop9			;Wenn Zeichen="r" -> Software-Reset
	CALL CharOut
	CALL SReset
	JMP Beginn
Loop9:
	CJNE A,#64h,Loop10			;Wenn Zeichen="d" -> Byte anzeigen
	CALL CharOut
	CALL DisplayByte
	JMP Beginn
Loop10:
	CJNE A,#65h,Loop1			;Wenn Zeichen="e" -> Byte editieren
	CALL CharOut
	CALL EditByte
	JMP Beginn
 
;********************
;** Unterprogramme **
;********************
 
;**********************************
;** Schnittstelle initialisieren **
;**********************************
 
SeriellInit:
	MOV TH1,#0FDh				;Timer 1 zu Baud-Rate-Generierung
	MOV TL1,#0FDh				;Reloadvalue für 9600 Baud
	MOV TMOD,#00100000b			;Timer 1 auf Mode 2
	SETB TR1
	CLR SM0					;Serielle Schnittstelle auf Mode 1
	SETB SM1
	SETB REN				;Datenempfang aktivieren
	MOV PCON,#00h
	RET
 
;*************
;** Auswahl **
;*************
 
Auswahl:
	CALL CharInHide			;auf Eingabe warten
	CJNE A,#1Bh,Auswahl1			;Wenn Zeichen=ESC -> C=0
	CLR C
	RET
Auswahl1:
	CJNE A,#0Dh,Auswahl			;Wenn Zeichen=Return -> C=1
	SETB C
	RET
 
;**********************
;** Programm starten **
;**********************
 
Go:
	MOV A,#20h				;Space ausgeben
	CALL CharOut
	CALL HexWordIn				;Startadresse einlesen
	JC GoE
	CALL ReturnOut
	PUSH DPH
	PUSH DPL
	CALL RestoreBPoint			;Breakpoint-Adresse -> DPTR
	MOV A,DPH
	JZ Go1
	CALL BreakAkt
Go1:
	POP DPL
	POP DPH
	CLR A					;ACCU, PSW, SP auf Anfangswerte setzten
	MOV PSW,#00h
	MOV SP,#07h
	JMP @A+DPTR				;Programm starten
GoE:
	RET
 
;**********************
;** IntelHex-Eingabe **
;**********************
 
IntelHexIn:
	MOV DPTR,#IAchtungStr
	CALL StrOut
	CALL Auswahl
	JNC IntelHexInE2
	CALL ReturnOut
	PUSH B
IntelHexIn1:
	MOV A,#3Eh				;">"-Zeichen ausgeben
	CALL CharOut
IntelHexIn2:
	CALL CharInHide			;auf Eingabe warten
	CJNE A,#3Ah,IntelHexIn2		;Wenn Zeichen=":" -> Weiter
	CALL CharOut
	CALL HexByteIn				;Anzahl der Datenbytes -> B
	MOV B,A
	CALL HexWordIn				;Startadresse -> DPTR
	JZ IntelHexIn3
	CALL CheckAddr
	JC IntelHexInF
IntelHexIn3:
	CALL HexByteIn				;Type-Byte einlesen und zwischenspeichern
	PUSH ACC
IntelHexIn4:
	MOV A,B
	JZ IntelHexIn5
	CALL HexByteIn				;Datenbyte einlesen
	MOVX @DPTR,A				;Datenbyte -> Adresse in DPTR
	INC DPTR
	DEC B
	JMP IntelHexIn4
IntelHexIn5:
	CALL HexByteIn				;CheckSum einlesen (wird übergangen)
IntelHexIn6:
	CALL CharInHide			;Auf Return (CR oder LF) warten
	CJNE A,#0Dh,IntelHexIn7
	JMP IntelHexIn8
IntelHexIn7:
	CJNE A,#0Ah,IntelHexIn6
IntelHexIn8:
	CALL ReturnOut
	POP ACC					;Type-Byte zurückholen
	JNZ IntelHexInE1			;Wenn <>00h Einlesen beenden, sonst weiter
	JMP IntelHexIn1
IntelHexInF:
	MOV DPTR,#IFehlerStr
	CALL StrOut
IntelHexInE1:
	POP B
IntelHexInE2:
	RET
 
;**************************
;** Adreß-Bereich prüfen **
;**************************
 
CheckAddr:
	MOV A,DPH
	CJNE A,#80h,CheckAddr1
CheckAddr1:
	JC CheckAddrF
	CJNE A,#87h,CheckAddr2
	JMP CheckAddrF
CheckAddr2:
	PUSH ACC
	MOV A,B
	ADD A,DPL
	POP ACC
	JNC CheckAddr3
	INC A
	CJNE A,#87h,CheckAddr3
	JMP CheckAddrF
CheckAddr3:
	CJNE A,#0A0h,CheckAddr4
CheckAddr4:
	JNC CheckAddrF
	CLR C
	RET
CheckAddrF:
	SETB C
	RET
 
;*********************
;** Optionen ändern **
;*********************
 
Options:
	MOV DPTR,#OptionStr
	CALL StrOut
	MOV DPTR,#ListNum
	MOVX A,@DPTR
	CALL HexByteOut
	MOV DPTR,#Option1Str
	CALL StrOut
	MOV DPTR,#Serielle
	MOVX A,@DPTR
	CALL HexByteOut
	MOV DPTR,#OEingabeStr
	CALL StrOut
Options1:
	CALL CharInHide
	CJNE A,#1Bh,Options2			;Wenn ESC gedrückt -> Beenden
	CALL ReturnOut
	RET
Options2:
	CJNE A,#6Ch,Options3			;Wenn Zeichen="l" -> Listingslänge ändern
	CALL CharOut
	MOV A,#20h				;Space ausgeben
	CALL CharOut
	CALL HexByteIn
	JC Options
	MOV DPTR,#ListNum
	MOVX @DPTR,A
	JMP Options
Options3:
	CJNE A,#73h,Options1			;Wenn Zeichen="s" -> serielle Schnittstelle ändern
	CALL CharOut
	MOV A,#20h				;Space ausgeben
	CALL CharOut
	CALL HexByteIn
	JC Options
	MOV DPTR,#OResetStr
	CALL StrOut
	MOV DPTR,#Serielle
	MOVX @DPTR,A
Options4:
	JMP Options4
 
;********************
;** Software-Reset **
;********************
 
SReset:
	MOV DPTR,#SResetStr
	CALL StrOut
	CALL Auswahl
	JC Sreset1
	RET
Sreset1:
	MOV DPTR,#8000h
SReset2:
	CLR A
	MOVX @DPTR,A
	INC DPTR
	MOV A,DPH
	CJNE A,#88h,SReset2
	MOV DPTR,#SRFertigStr
	CALL StrOut
	RET
 
;*******************
;** Byte anzeigen **
;*******************
 
DisplayByte:
	CALL CharInHide			;Auf Tastendruck warten
	CJNE A,#1Bh,DisplayByte1		;Wenn ESC gedrückt -> Beenden
	RET
DisplayByte1:
	CJNE A,#63h,DisplayByte2		;Wenn "c" gedrückt -> Programm-Speicher anzeigen
	CALL CharOut
	CALL DisplayCode
	RET
DisplayByte2:
	CJNE A,#69h,DisplayByte3		;Wenn "i" gedrückt -> internen Daten-Speicher anzeigen
	CALL CharOut
	CALL DisplayIData
	RET
DisplayByte3:
	CJNE A,#78h,DisplayByte		;Wenn "x" gedrückt -> externen Daten-Speicher anzeigen
	CALL CharOut
	CALL DisplayXData
	RET	
 
;********************************
;** Programm-Speicher anzeigen **
;********************************
 
DisplayCode:
	MOV A,#20h				;Space ausgeben
	CALL CharOut
	CALL HexWordIn				;Speicher-Adresse eingeben
	JC DisplayCodeE			;Bei ESC Beenden
	CLR A					;Speicherinhalt -> ACCU
	MOVC A,@A+DPTR
	MOV DPTR,#DAktuellStr
	CALL StrOut
	CALL HexByteOut
	CALL ReturnOut
DisplayCodeE:
	RET
 
;**************************************
;** internen Daten-Speicher anzeigen **
;**************************************
 
DisplayIData:
	MOV A,#20h				;Space ausgeben
	CALL CharOut
	CALL HexByteIn				;Speicher-Adresse eingeben
	JC DisplayIDataE			;Bei ESC Beenden
	MOV DPTR,#DAktuellStr
	CALL StrOut
	CJNE A,#81h,DisplayIData1
	MOV DPTR,#SPSafe
	JMP DisplayIData10
DisplayIData1:
	CJNE A,#82h,DisplayIData2
	MOV DPTR,#DPTRSafe
	JMP DisplayIData10
DisplayIData2:
	CJNE A,#83h,DisplayIData3
	MOV DPTR,#DPTRSafe
	INC DPTR
	JMP DisplayIData10
DisplayIData3:
	CJNE A,#0A8h,DisplayIData4
	MOV DPTR,#IESafe
	JMP DisplayIData10
DisplayIData4:
	CJNE A,#0D0h,DisplayIData5
	MOV DPTR,#PSWSafe
	JMP DisplayIData10
DisplayIData5:
	CJNE A,#0E0h,DisplayIData6
	MOV DPTR,#ACCUSafe
	JMP DisplayIData10
DisplayIData6:
	MOV C,ACC.
7
	ANL C,PSW.4
	JC DisplayIData7
	MOV C,ACC.7
	ORL C,PSW.4
	JNC DisplayIData7
	JMP DisplayIData9
DisplayIData7:
	MOV C,ACC.6
	ANL C,PSW.3
	JC DisplayIData8
	MOV C,ACC.
6
	ORL C,PSW.3
	JNC DisplayIData8
	JMP DisplayIData9
DisplayIData8:
	ANL A,#00111111b
	CJNE A,#00h,DisplayIData9
	MOV A,R0
	JMP DisplayIData11
DisplayIData9:
	MOV A,R0				;R0 sichern
	PUSH ACC
	MOV R0,A				;Speicherinhalt -> ACCU
	MOV A,@R0
	CALL HexByteOut
	CALL ReturnOut
	POP ACC
	MOV R0,A				;R0 zurückholen
	JMP DisplayIDataE
DisplayIData10:
	MOVX A,@DPTR
DisplayIData11:
	CALL HexByteOut
	CALL ReturnOut
DisplayIDataE:
	RET
 
;**************************************
;** externen Daten-Speicher anzeigen **
;**************************************
 
DisplayXData:
	MOV A,#20h				;Space ausgeben
	CALL CharOut
	CALL HexWordIn				;Speicher-Adresse eingeben
	JC DisplayXDataE			;Bei ESC Beenden
	MOVX A,@DPTR				;Speicherinhalt -> ACCU
	MOV DPTR,#DAktuellStr
	CALL StrOut
	CALL HexByteOut
	CALL ReturnOut
DisplayXDataE:
	RET
 
;********************
;** Byte editieren **
;********************
 
EditByte:
	CALL CharInHide			;Auf Tastendruck warten
	CJNE A,#1Bh,EditByte1			;Wenn ESC gedrückt -> Beenden
	RET
EditByte1:
	CJNE A,#63h,EditByte2			;Wenn "c" gedrückt -> Programm-Speicher editieren
	CALL CharOut
	CALL EditCode
	RET
EditByte2:
	CJNE A,#69h,EditByte3			;Wenn "i" gedrückt -> internen Daten-Speicher editieren
	CALL CharOut
	CALL EditIData
	RET
EditByte3:
	CJNE A,#78h,EditByte			;Wenn "x" gedrückt -> externen Daten-Speicher editieren
	CALL CharOut
	CALL EditXData
	RET	
 
;*********************************
;** Programm-Speicher editieren **
;*********************************
 
EditCode:
	MOV A,#20h				;Space ausgeben
	CALL CharOut
	CALL HexWordIn				;Speicher-Adresse eingeben
	JC EditCodeE2				;Bei ESC Beenden
	PUSH B
	MOV B,#01h
	CALL CheckAddr
	POP B
	JC EditCodeF
	CLR A					;Speicherinhalt -> ACCU
	MOVC A,@A+DPTR
	PUSH DPH
	PUSH DPL
	MOV DPTR,#DAktuellStr
	CALL StrOut
	CALL HexByteOut
	MOV DPTR,#ENeuStr
	CALL StrOut
	POP DPL
	POP DPH
	CALL HexByteIn
	JC EditCodeE1
	MOVX @DPTR,A
EditCodeE1:
	CALL ReturnOut
EditCodeE2:
	RET
EditCodeF:
	MOV DPTR,#IFehlerStr			;Fehlermeldung
	CALL StrOut
	RET	
 
;***************************************
;** internen Daten-Speicher editieren **
;***************************************
 
EditIData:
	MOV A,#20h				;Space ausgeben
	CALL CharOut
	CALL HexByteIn				;Speicher-Adresse eingeben
	JNC EditIData0				;Bei ESC Beenden
	RET
EditIData0:
	MOV DPTR,#DAktuellStr
	CALL StrOut
	CJNE A,#81h,EditIData1
	MOV DPTR,#SPSafe
	JMP EditIData11
EditIData1:
	CJNE A,#82h, EditIData2
	MOV DPTR,#DPTRSafe
	JMP EditIData11
EditIData2:
	CJNE A,#83h, EditIData3
	MOV DPTR,#DPTRSafe
	INC DPTR
	JMP EditIData11
EditIData3:
	CJNE A,#0A8h, EditIData4
	MOV DPTR,#IESafe
	JMP EditIData11
EditIData4:
	CJNE A,#0D0h, EditIData5
	MOV DPTR,#PSWSafe
	JMP EditIData11
EditIData5:
	CJNE A,#0E0h, EditIData6
	MOV DPTR,#ACCUSafe
	JMP EditIData11
EditIData6:
	MOV C,ACC.7
	ANL C,PSW.4
	JC EditIData7
	MOV C,ACC.7
	ORL C,PSW.4
	JNC EditIData7
	JMP EditIData9
EditIData7:
	MOV C,ACC.
6
	ANL C,PSW.3
	JC EditIData8
	MOV C,ACC.6
	ORL C,PSW.3
	JNC EditIData8
	JMP EditIData9
EditIData8:
	ANL A,#00111111b
	CJNE A,#00h,EditIData9
	MOV A,R0
	CALL HexByteOut
	MOV DPTR,#ENeuStr
	CALL StrOut
	CALL HexByteIn
	JC EditIDataE
	MOV R0,A
	JMP EditIDataE
EditIData9:	
	MOV A,R0				;R0 sichern
	PUSH ACC
	MOV R0,A				;Speicherinhalt -> ACCU
	MOV A,@R0
	CALL HexByteOut
	MOV DPTR,#ENeuStr
	CALL StrOut
	CALL HexByteIn
	JC EditIData10
	MOV @R0,A
EditIData10:
	POP ACC
	MOV R0,A				;R0 zurückholen
	JMP EditIDataE
EditIData11:
	MOVX A,@DPTR
	CALL HexByteOut
	PUSH DPH
	PUSH DPL
	MOV DPTR,#ENeuStr
	CALL StrOut
	POP DPL
	POP DPH
	CALL HexByteIn
	JC EditIDataE
	MOVX @DPTR,A
EditIDataE:
	CALL ReturnOut
	RET
 
;***************************************
;** externen Daten-Speicher editieren **
;***************************************
 
EditXData:
	MOV A,#20h				;Space ausgeben
	CALL CharOut
	CALL HexWordIn				;Speicher-Adresse eingeben
	JC EditXDataE2				;Bei ESC Beenden
	PUSH DPH
	PUSH DPL
	MOVX A,@DPTR				;Speicherinhalt -> ACCU
	MOV DPTR,#DAktuellStr
	CALL StrOut
	CALL HexByteOut
	MOV DPTR,#ENeuStr
	CALL StrOut
	POP DPL
	POP DPH
	CALL HexByteIn
	JC EditXDataE1
	MOVX @DPTR,A
EditXDataE1:
	CALL ReturnOut
EditXDataE2:
	RET
 
;***********************
;** Breakpoint ändern **
;***********************
 
BreakCh:
	CALL CharInHide			;Auf Tastendruck warten
	CJNE A,#1Bh,BreakCh1			;Wenn ESC gedrückt -> Beenden
	RET
BreakCh1:
	CJNE A,#73h,BreakCh2			;Wenn "s" gedrückt -> BP setzen
	CALL CharOut
	CALL BreakSet
	RET
BreakCh2:
	CJNE A,#6Ch,BreakCh3			;Wenn "l" gedrückt -> BP anzeigen
	CALL CharOut
	CALL BreakList
	RET
BreakCh3:
	CJNE A,#64h,BreakCh			;Wenn "d" gedrückt -> BP löschen
	CALL CharOut
	CALL BreakDel
	RET
 
;************************
;** Breakpoint setzten **
;************************
 
BreakSet:
	MOV A,#20h				;Space ausgeben
	CALL CharOut
	CALL HexWordIn				;BP-Adresse eingeben
	JC BreakSetE				;Bei ESC Beenden
	PUSH B
	MOV B,#03h
	CALL CheckAddr				;BP-Adresse prüfen
	POP B
	JC BreakSetF				;wenn BP-Adresse ungültig -> Fehler
	CALL StoreBPoint			;DPTR -> BP-Adresse
	MOV DPTR,#BSetStr			;BP-Adresse gesetzt
	CALL StrOut
	RET
BreakSetF:
	MOV DPTR,#BSFehlerStr			;Fehlermeldung
	CALL StrOut
BreakSetE:
	RET
 
;*************************
;** Breakpoint anzeigen **
;*************************
 
BreakList:
	MOV DPTR,#BListStr
	CALL StrOut
	CALL RestoreBPoint			;BP-Adresse -> DPTR
	MOV A,DPH
	JZ BreakList1				;Wenn BP-Adresse=00xxh -> BreakList1
	CALL HexWordOut			;BP-Adresse ausgeben
	CALL ReturnOut
	RET
BreakList1:
	MOV DPTR,#BLKeinStr			;keine ausgeben
	CALL StrOut
	RET
 
;************************
;** Breakpoint löschen **
;************************
 
BreakDel:
	MOV DPTR,#0000h
	CALL StoreBPoint			;DPTR -> Breakpoint-Adresse
	MOV DPTR,#BDelStr			;BP gelöscht ausgeben
	CALL StrOut
	RET
 
;***************************
;** Breakpoint aktivieren **
;***************************
 
BreakAkt:
	MOV DPTR,#BAktStr
	CALL StrOut
	CALL Auswahl
	JC BreakAkt1
	RET
BreakAkt1:					;Break-Befehle in Programm schreiben
	CALL RestoreBPoint			;Breakpoint-Adresse -> DPTR
	MOVX A,@DPTR				;Befehle bei Break-Adresse lesen
	PUSH ACC
	INC DPTR
	MOVX A,@DPTR
	PUSH ACC
	INC DPTR
	MOVX A,@DPTR
	PUSH ACC
	MOV DPTR,#BreakMem			;Befehle in BreakMem sichern
	POP ACC
	MOVX @DPTR,A
	INC DPTR
	POP ACC
	MOVX @DPTR,A
	INC DPTR
	POP ACC
	MOVX @DPTR,A
	CALL RestoreBPoint			;Breakpoint-Adresse -> DPTR
	MOV A,#12h				;Breakbefehle an Break-Adresse schreiben
	MOVX @DPTR,A				;LCALL-Befehl schreiben
	INC DPTR
	MOV A,#BreakProgH			;Sprungadresse (BreakProg) schreiben
	MOVX @DPTR,A
	INC DPTR
	MOV A,#BreakProgL
	MOVX @DPTR,A
	MOV DPTR,#BreakDone			;BreakDone aktivieren
	MOV A,#0FFh
	MOVX @DPTR,A
	RET
 
;***************************
;** Break-Befehle löschen **
;***************************
 
ClrBreak:
	MOV DPTR,#BreakMem			;In BreakMem gesicherte Befehle lesen
	MOVX A,@DPTR
	PUSH ACC
	INC DPTR
	MOVX A,@DPTR
	PUSH ACC
	INC DPTR
	MOVX A,@DPTR
	PUSH ACC
	CALL RestoreBreak			;Break-Adresse -> DPTR
	POP ACC					;Gesicherte Befehle an Break-Adresse schreiben
	MOVX @DPTR,A
	INC DPTR
	POP ACC
	MOVX @DPTR,A
	INC DPTR
	POP ACC
	MOVX @DPTR,A
	MOV DPTR,#BreakDone			;BreakDone deaktivieren
	CLR A
	MOVX @DPTR,A
	RET
 
;*************************
;** Programm fortsetzen **
;*************************
 
Continue:
	CALL ReturnOut
	CALL RestoreBreak			;Break-Adresse -> DPTR
	MOV A,DPH				;Wenn Break-Adresse=00xxh -> Continue beenden
	JZ ContinueE
	MOV DPTR,#PSWSafe			;PSW zurückholen
	MOVX A,@DPTR
	MOV PSW,A
	MOV DPTR,#SPSafe			;SP zurückholen
	MOVX A,@DPTR
	ADD A,#02h				;2, die bei Abbruch von SP abgezogen wurden dazuzählen
	MOV SP,A
	MOV DPTR,#IESafe			;gesichertes IE-Register zwischenspeichern
	MOVX A,@DPTR
	PUSH ACC
	MOV DPTR,#ACCUSafe			;gesicherten ACCU zwischenspeichern
	MOVX A,@DPTR
	PUSH ACC
	MOV DPTR,#DPTRSafe			;DPTR zurückholen
	MOVX A,@DPTR
	PUSH ACC
	INC DPTR
	MOVX A,@DPTR
	MOV DPL,A
	POP DPH
	POP ACC					;zwischengespeicherten ACCU zurückholen
	POP IE					;zwischengespeichertes IE-Register zurückholen
	RET					;Programm an Abbruchadresse (Stack) fortsetzen
ContinueE:
	MOV DPTR,#ContStr
	CALL StrOut
	RET
 
;**********
;** List **
;**********
 
List:
	MOV A,#20h				;Space ausgeben
	CALL CharOut
	CALL HexWordIn				;Startadresse für Listing eingeben -> DPTR
	JC ListE				;Wenn ESC dann beenden
	CALL ReturnOut
	CALL ReturnOut
	PUSH DPH
	PUSH DPL
	MOV DPTR,#ListNum			;Lädt die Anzahl der Befehle
	MOVX A,@DPTR
	POP DPL
	POP DPH
	JNZ List1				;Wenn Anzahl <>0 -> List1, sonst
	MOV A,#10h				;Zähler auf 16 Befehle setzen
List1:
	PUSH ACC
	CALL DisASM				;Befehl an Adresse im DPTR ausgeben
	POP ACC
	INC DPTR				;Listingadresse erhöhen
	DJNZ ACC,List1				;Ist Zähler auf 0 -> Listing beenden
ListE:
	RET
 
;******************
;** Disassembler **
;******************
 
DisASM:
	CALL HexWordOut			;Adresse im DPTR wird ausgegeben
	MOV A,#05h
	CALL SpaceOut				;5 Space werden ausgegeben
	CLR A
	MOVC A,@A+DPTR				;Befehlsbyte an Adresse im DPTR einlesen
	CALL StoreDPTR1			;DPTR sichern -> DPTR1
	MOV DPTR,#BefehlNum
	CLR C					;DPTR:=DPTR+2*ACCU
	RLC A					;RLC A = 2*ACCU
	JNC DisASM01
	INC DPH
DisASM01:
	ADD A,DPL
	MOV DPL,A
	JNC DisASM02
	INC DPH
DisASM02:
	CLR A					;Adresse an der Befehlsstring beginnt -> DPTR
	MOVC A,@A+DPTR
	PUSH ACC
	MOV A,#01h
	MOVC A,@A+DPTR
	MOV DPL,A
	POP DPH
DisASM1:
	CLR A
	MOVC A,@A+DPTR
	JZ DisASME				;Wenn Zeichen=00h -> Stringausgabe beenden
	CJNE A,#01h,DisASM2			;Wenn Zeichen=01h -> nächstes Befehlsbyte lesen und in
						;HEX ausgeben
	CALL ReadAddr
	CALL HexByteOut
	JMP DisASM6
DisASM2:
	CJNE A,#02h,DisASM3			;Wenn Zeichen=02h -> nächstes Befehlsword lesen und in
						;HEX ausgeben
	CALL ReadAddr				;gelesene Adresse = Bits 8-15 der Sprungadresse
	CALL HexByteOut
	CALL ReadAddr				;gelesene Adresse = Bits 0-7 der Sprungadresse
	CALL HexByteOut
	JMP DisASM6
DisASM3:
	CJNE A,#03h,DisASM4			;Wenn Zeichen=03h -> nächstes Befehlsbyte=relative							;Adresse lesen
	CALL ReadAddr
	CALL RestoreDPTR1			;gesicherten DPTR1 -> DPTR
	INC DPTR				;relative Adresse in absolute umrechnen und in HEX							;ausgeben
	ADD A,DPL
	MOV DPL,A
	CALL HexWordOut
	CALL RestoreDPTR2			;gesicherten DPTR2 -> DPTR
	JMP DisASM6
DisASM4:
	CJNE A,#04h,DisASM5			;Wenn Zeichen=04h -> 11 Bit-Adresse lesen und ausgeben
	CALL StoreDPTR2			;DPTR sichern -> DPTR2
	CALL RestoreDPTR1			;gesicherten DPTR1 -> DPTR
	CLR A
	MOVC A,@A+DPTR				;Befehlsbyte nochmal lesen
	RL A					;Die letzten 3 Bit (= Bit 8-10 der Sprungadresse)
	RL A					;an den Anfang schieben
	RL A
	ANL A,#00000111b			;und alle anderen Bits 0 setzten
	INC DPTR				;DPTR:=DPTR+2 = Adresse des nächsten Befehlsbytes
	INC DPTR
	PUSH ACC				;ACCU (Bits 8-10 der Sprungadresse) sichern
	MOV A,DPH
	ANL A,#11111000b			;Bits 8-10 der nächsten Adresse auf 0 setzten
	MOV DPH,A
	POP ACC					;ACCU zurückholen
	ORL A,DPH				;ACCU mit der näschsten Adresse OR-verknüpfen -> 
;Bits 8-15 der Sprungadresse
	CALL HexByteOut
	CALL RestoreDPTR2			;gesicherten DPTR2 -> DPTR
	CALL ReadAddr				;gelesene Adresse = Bits 0-7 der Sprungadresse
	CALL HexByteOut
	JMP DisASM6	
DisASM5:
	CALL CharOut
DisASM6:
	INC DPTR
	JMP DisASM1
DisASME:
	CALL RestoreDPTR1			;gesicherten DPTR1 -> DPTR
	CALL ReturnOut
	RET
 
;******************************
;** Adresse bei Befehl lesen **
;******************************
 
ReadAddr:
	CALL StoreDPTR2			;DPTR sichern -> DPTR2
	CALL RestoreDPTR1			;gesicherten DPTR1 -> DPTR
	INC DPTR
	CLR A
	MOVC A,@A+DPTR
	PUSH ACC
	CALL StoreDPTR1			;DPTR sichern -> DPTR1
	CALL RestoreDPTR2			;gesicherten DPTR2 -> DPTR
	POP ACC
	RET
 
;***********************
;** Speicher anzeigen **
;***********************
 
ShowReg:
	MOV DPTR,#SRegStr
	CALL StrOut
	MOV DPTR,#ACCUSafe
	MOVX A,@DPTR
	CALL HexByteOut			;gesicherten ACCU-Inhalt anzeigen
	CALL Trenn
	MOV A,B
	CALL HexByteOut			;B-Inhalt anzeigen
	CALL Trenn
	MOV A,R0
	CALL HexByteOut			;R0-Inhalt anzeigen
	CALL Trenn
	MOV A,R1
	CALL HexByteOut			;R1-Inhalt anzeigen
	CALL Trenn
	MOV A,R2
	CALL HexByteOut			;R2-Inhalt anzeigen
	CALL Trenn
	MOV A,R3
	CALL HexByteOut			;R3-Inhalt anzeigen
	CALL Trenn
	MOV A,R4
	CALL HexByteOut			;R4-Inhalt anzeigen
	CALL Trenn
	MOV A,R5
	CALL HexByteOut			;R5-Inhalt anzeigen
	CALL Trenn
	MOV A,R6
	CALL HexByteOut			;R6-Inhalt anzeigen
	CALL Trenn
	MOV A,R7
	CALL HexByteOut			;R7-Inhalt anzeigen
	CALL Trenn
	MOV DPTR,#PSWSafe			;gesicherten PSW-Inhalt anzeigen
	MOVX A,@DPTR
	CALL HexByteOut
	CALL Trenn
	MOV DPTR,#DPTRSafe			;gesicherten DPTR-Inhalt anzeigen
	MOVX A,@DPTR
	CALL HexByteOut
	INC DPTR
	MOVX A,@DPTR
	CALL HexByteOut
	CALL Trenn
	MOV DPTR,#SPSafe			;gesicherten SP-Inhalt anzeigen
	MOVX A,@DPTR
	CALL HexByteOut
	CALL ReturnOut
	CALL ReturnOut
	RET
Trenn:
	MOV A,#20h
	CALL CharOut
	MOV A,#20h
	CALL CharOut
	RET	
 
;********************
;** Word speichern **
;********************
 
StoreBreak:
	PUSH ACC
	PUSH DPL
	PUSH DPH
	MOV DPTR,#BreakAdr
	JMP StoreWord
StoreBPoint:
	PUSH ACC
	PUSH DPL
	PUSH DPH
	MOV DPTR,#BreakPoint
	JMP StoreWord
StoreDPTR1:
	PUSH ACC
	PUSH DPL
	PUSH DPH
	MOV DPTR,#DPTR1Mem
	JMP StoreWord
StoreDPTR2:
	PUSH ACC
	PUSH DPL
	PUSH DPH
	MOV DPTR,#DPTR2Mem
StoreWord:
	POP ACC
	MOVX @DPTR,A
	INC DPTR
	POP ACC
	MOVX @DPTR,A
	POP ACC
	RET
 
;****************
;** Word laden **
;****************
 
RestoreBreak:
	MOV DPTR,#BreakAdr
	JMP RestoreWord
RestoreBPoint:
	MOV DPTR,#BreakPoint
	JMP RestoreWord
RestoreDPTR1:
	MOV DPTR,#DPTR1Mem
	JMP RestoreWord
RestoreDPTR2:
	MOV DPTR,#DPTR2Mem
RestoreWord:
	PUSH ACC
	MOVX A,@DPTR
	PUSH ACC
	INC DPTR
	MOVX A,@DPTR
	MOV DPL,A
	POP DPH
	POP ACC
	RET
 
;*******************************************
;** Warteschleife für CharOut, CharInHide **
;*******************************************
 
Warten:
	DJNZ ACC,Warten
	RET
 
;***************************************
;** Unterprogramme zur Zeichenausgabe **
;***************************************
 
;******************
;** Char-Ausgabe **
;******************
 
CharOut:
	PUSH PSW
	PUSH DPH
	PUSH DPL
	MOV DPTR,#Serielle
	PUSH ACC
	MOVX A,@DPTR
	CJNE A,#01h,CharOut1			;Wenn Serielle=01h -> ser. Schnittstelle auf PA
	POP ACC
	MOV DPTR,#DataRegA
	JMP CharOut5
CharOut1:
	CJNE A,#02h,CharOut3			;Wenn Serielle=02h -> echte ser. Schnittstelle
	POP ACC
	POP DPL
	POP DPH
	POP PSW
	CLR TI					;echte serielle Schnittstelle
	MOV SBUF,A
CharOut2:
	JNB TI,CharOut2
	RET
CharOut3:					;sonst ser.
 Schnittstelle auf P1
	POP ACC
	POP DPL
	POP DPH
	PUSH B					;simulierte ser. Schnittstelle auf P1
	CLR TDat				;Startbit setzen
	MOV B,#08h
CharOut4:					;Schleife zur Ausgabe der 8 Datenbits
	PUSH ACC
	MOV A,#41
	CALL Warten
	POP ACC
	RRC A
	MOV TDat,C				;Datenbit setzen
	DJNZ B,CharOut4
	POP B
	PUSH ACC
	MOV A,#41
	CALL Warten
	NOP
	NOP
	SETB TDat				;Stoppbit setzen
	MOV A,#92
	CALL Warten
	POP ACC
	RRC A
	POP PSW
	RET
CharOut5:					;simulierte ser. Schnittstelle auf PA
	PUSH B
	PUSH ACC
	MOVX A,@DPTR
	CLR ACC.1				;Startbit setzen
	MOVX @DPTR,A
	POP ACC
	MOV B,#08h
CharOut6:					;Schleife zur Ausgabe der 8 Datenbits
	RRC A
	PUSH ACC
	MOV A,#38
	CALL Warten
	MOVX A,@DPTR
	MOV ACC.1,C				;Datenbit setzen
	MOVX @DPTR,A
	POP ACC
	DJNZ B,CharOut6
	POP B
	PUSH ACC
	MOV A,#39
	CALL Warten
	MOVX A,@DPTR
	SETB ACC.1				;Stoppbit setzen
	MOVX @DPTR,A
	MOV A,#90
	CALL Warten
	POP ACC
	RRC A
	POP DPL
	POP DPH
	POP PSW
	RET
 
;********************
;** Return-Ausgabe **
;********************
 
ReturnOut:
	PUSH ACC
	MOV A,#0Dh
	CALL CharOut
	MOV A,#0Ah
	CALL CharOut
	POP ACC
	RET
 
;*******************
;** Space-Ausgabe **
;*******************
 
SpaceOut:
	JZ SpaceOutE
	PUSH ACC
	MOV A,#20h
	CALL CharOut
	POP ACC
	DEC A
	JMP SpaceOut
SpaceOutE:
	RET
 
;********************
;** Cursor-Ausgabe **
;********************
 
CursorOut:
	PUSH ACC
	MOV A,#1Bh			;ESC-Zeichen ausgeben
	CALL CharOut
	POP ACC
	PUSH DPH
	PUSH DPL
	MOV DPTR,#CurNum
	MOVC A,@A+DPTR			;Steuerzeichen von Adresse DPTR (CurNum) + ACCU lesen
	POP DPL
	POP DPH
	CALL CharOut			;und ausgeben
	RET
 
;********************
;** String-Ausgabe **
;********************
 
StrOut:
	PUSH ACC
StrOut1:
	CLR A
	MOVC A,@A+DPTR			;Zeichen an Adresse im DPTR lesen
	JZ StrOut2			;Wenn Zeichen=00h, dann Beenden
	CALL CharOut			;sonst Zeichen ausgeben
	INC DPTR			;Adresse erhöhen
	JMP StrOut1			;und nächstes Zeichen lesen
StrOut2:
	POP ACC
	RET
 
;************************
;** Hex-Nibble-Ausgabe **
;************************
 
HexNibOut:
	PUSH ACC
	PUSH PSW
	ANL A,#0Fh
	CJNE A,#0Ah,HexNibOut1
HexNibOut1:
	JC HexNibOut2
	ADD A,#37h
	JMP HexNibOut3
HexNibOut2:
	ADD A,#30h
HexNibOut3:
	CALL CharOut
	POP PSW
	POP ACC
	RET
 
;**********************
;** Hex-Byte-Ausgabe **
;**********************
 
HexByteOut:
	SWAP A
	CALL HexNibOut
	SWAP A
	CALL HexNibOut
	RET
 
;**********************
;** Hex-Word-Ausgabe **
;**********************
 
HexWordOut:
	PUSH ACC
	MOV A,DPH
	CALL HexByteOut
	MOV A,DPL
	CALl HexByteOut
	POP ACC
	RET
 
;***********************
;** Binär-Bit-Ausgabe **
;** Bit im C          **
;***********************
 
BinBitOut:
	PUSH ACC
	MOV A,#30h
	JNC BinBitOut1
	INC A
BinBitOut1:
	CALL CharOut
	POP ACC
	RET
 
;***********************
;** Binär-Bit-Ausgabe **
;** Bit im ACCU       **
;***********************
 
BinBitOutACCU:
	PUSH B
	MOV B,#30h
	JNB ACC.
0,BinBitOutACCU1
	INC B
BinBitOutACCU1:
	XCH A,B
	CALL CharOut
	XCH A,B
	POP B
	RET
 
;************************
;** Binär-Byte-Ausgabe **
;************************
 
BinByteOut:
	PUSH B
	MOV B,#08h
BinByteOut1:
RL A
	CALL BinBitOutACCU
	DJNZ B,BinByteOut1
	POP B
	RET
 
;************************
;** Binär-Word-Ausgabe **
;************************
 
BinWordOut:
	PUSH ACC
	MOV A,DPH
	CALL BinByteOut
	MOV A,DPL
	CALL BinByteOut
	POP ACC
	RET
 
;*************************
;** Dezimalzahl-Ausgabe **
;*************************
 
NumOut:
	PUSH B
	PUSH ACC
	MOV B,#64h
	DIV AB					;Zahl/100 => A=100er-Stelle; B=Rest
	ADD A,#30h				;100er-Stelle wird ausgegeben
	CALL CharOut
	MOV A,B
	MOV B,#0Ah
	DIV AB					;Rest von vorher/100 => A=10er-Stelle; B=Rest
	ADD A,#30h				;10er-Stelle wird ausgegeben
	CALL CharOut
	MOV A,B
	ADD A,#30h				;Rest=1er-Stelle wird ausgegeben
	CALL CharOut
	POP ACC
	POP B
	RET
 
;**************************************
;** Unterprogramme zu Zeicheneingabe **
;**************************************
 
;*****************************
;** Char-Eingabe unsichtbar **
;*****************************
 
CharInHide:
	PUSH PSW
PUSH DPH
	PUSH DPL
	MOV DPTR,#Serielle
	MOVX A,@DPTR
	CJNE A,#01h,CharInHide1		;Wenn Serielle=01h -> ser. Schnittstelle auf PA
	MOV DPTR,#PinRegA
	JMP CharInHide7
CharInHide1:
	CJNE A,#02h,CharInHide3		;Wenn Serielle=02h -> echte ser. Schnittstelle
	POP DPL
	POP DPH
	POP PSW
CharInHide2:
	JNB RI,CharInHide2
	MOV A,SBUF
	CLR RI
	RET
CharInHide3:					;sonst ser. Schnittstelle auf P1
	POP DPL
	POP DPH
CharInHide4:					;simulierte ser. Schnittstelle auf P1
	JB RDat,CharInHide4			;auf Startbit warten
	MOV A,#20
	CALL Warten
	NOP
	JB RDat,CharInHide4			;prüfen ob Startbit noch vorhanden
	PUSH B
	MOV B,#08h
CharInHide5:					;Schleife um 8 Datenbits einzulesen
	PUSH ACC
	MOV A,#41
	CALL Warten
	POP ACC
	MOV C,RDat				;Datenbit einlesen
	RRC A
	NOP
	DJNZ B,CharInHide5
	POP B
	PUSH ACC
	MOV A,#39
	CALL Warten
	POP ACC
	NOP
	JNB RDat,CharInHide6			;prüfen ob Stoppbit vorhanden
	POP PSW
	RET
CharInHide6:
	JNB RDat,CharInHide6
	JMP CharInHide4
CharInHide7:					;simulierte ser. Schnittstelle auf PA
	MOVX A,@DPTR
	JB ACC.
0,CharInHide7			;auf Startbit warten
	MOV A,#19
	CALL Warten
	NOP
	MOVX A,@DPTR
	JB ACC.0,CharInHide7			;prüfen ob Startbit noch vorhanden
	PUSH B
	MOV B,#08h
CharInHide8:					;Schleife um 8 Datenbits einzulesen
	PUSH ACC
	MOV A,#40
	CALL Warten
	NOP
	MOVX A,@DPTR				;Datenbit einlesen
	MOV C,ACC.0
	POP ACC
	RRC A
	DJNZ B,CharInHide8
	POP B
	PUSH ACC
	MOV A,#39
	CALL Warten
	NOP
	MOVX A,@DPTR
	JNB ACC.0,CharInHide9			;prüfen ob Stoppbit vorhanden
	POP ACC
	POP DPL
	POP DPH
	POP PSW
	RET
CharInHide9:
	MOVX A,@DPTR
	JNB ACC.0,CharInHide9
	POP ACC
	JMP CharInHide7
 
;**************************
;** Char-Eingabe sichbar **
;**************************
 
CharIn:
	CALL CharInHide
	CALL CharOut
	PUSH PSW
	CJNE A,#0Dh,CharIn1
	PUSH ACC			
	MOV A,#0Ah
	CALL CharOut
	POP ACC
CharIn1:
	POP PSW
	RET
 
;************************
;** Hex-Nibbel-Eingabe **
;************************
 
HexNibIn:
	CALL CharInHide			;auf Eingabe warten
	CJNE A,#1Bh,HexNibIn1			;Wenn Zeichen=ESC -> C=1 und Beenden
	SETB C
	CLR A
	RET
HexNibIn1:
	CJNE A,#30h,HexNibIn2			;Wenn Zeichen<30h ("0") -> zurück zu Eingabe
HexNibIn2:
	JC HexNibIn
	CJNE A,#3Ah,HexNibIn3			;Wenn Zeichen<3A ("9"+1) -> Nummer
HexNibIn3:
	JC HexNibIn6
	ANL A,#11011111b			;Kleinbuchstaben auf große umwandeln
	CJNE A,#41h,HexNibIn4			;Wenn Zeichen<41h ("A") -> zurück zu Eingabe
HexNibIn4:
	JC HexNibIn
	CJNE A,#47h,HexNibIn5			;Wenn Zeichen<47h ("G") -> Buchstabe
HexNibIn5:
	JNC HexNibIn
	CALL CharOut
	CLR C
	SUBB A,#37h
	RET
HexNibIn6:					;Nummer
	CALL CharOut
	CLR C
	SUBB A,#30h
	RET
 
;**********************
;** Hex-Byte-Eingabe **
;**********************
 
HexByteIn:
	PUSH B
	CALL HexNibIn
	JC HexByteInE
	SWAP A
	MOV B,A
	CALL HexNibIn
	JC HexByteInE
	ORL A,B
	POP B
	RET
HexByteInE:
	CLR A
	POP B
	RET
 
;**********************
;** Hex-Word-Eingabe **
;**********************
 
HexWordIn:
	PUSH ACC
	CALL HexByteIn
	JC HexWordInE
	MOV DPH,A
	CALL HexByteIn
	JC HexWordInE
	MOV DPL,A
	POP ACC
	RET
HexWordInE:
	MOV DPTR,#0000h
	POP ACC
	RET
 
;***********************
;** Binär-Bit-Eingabe **
;** Bit -> C          **
;***********************
 
BinBitIn:
	PUSH ACC
BinBitIn1:
	CALL CharInHide
	CJNE A,#30h,BinBitIn2
	CLR C
	POP ACC
	RET
BinBitIn2:
	CJNE A,#31h,BinBitIn1
	SETB C
	POP ACC
	RET
 
;***********************
;** Binär-Bit-Eingabe **
;** Bit -> ACCU       **
;***********************
 
BinBitInACCU:
	PUSH ACC
BinBitInACCU1:
	CALL CharInHide
	CJNE A,#1Bh,BinBitInACCU2
	SETB C
	POP ACC
	RET
BinBitInACCU2:
	CJNE A,#30h,BinBitInACCU3
	CALL CharOut
	CLR C
	POP ACC
	CLR ACC.0
	RET
BinBitInACCU3:
	CJNE A,#31h,BinBitInACCU1
	CALL CharOut
	CLR C
	POP ACC
	SETB ACC.
0
	RET
 
;************************
;** Binär-Byte-Eingabe **
;************************
 
BinByteIn:
	PUSH B
	MOV B,#08h
BinByteIn1:
	CALL BinBitInACCU
	JC BinByteInE
	RL A
	DJNZ B,BinByteIn1
	POP B
	RET
BinByteInE:
	CLR A
	POP B
	RET
 
;************************
;** Binär-Word-Eingabe **
;************************
 
BinWordIn:
	PUSH ACC
	CALL BinByteIn
	JC BinWordInE
	MOV DPH,A
	CALL BinByteIn
	JC BinWordInE
	MOV DPL,A
	POP ACC
	RET
BinWordInE:
	MOV DPTR,#0000h
	POP ACC
	RET
 
;****************************
;** Dezimalziffern-Eingabe **
;****************************
 
NumIn:
	CALL CharInHide
	CJNE A,#1Bh,NumIn1
	SETB C
	CLR A
	RET
NumIn1:
	CJNE A,#30h,NumIn2
NumIn2:
	JC NumIn
	CJNE A,#3Ah,NumIn3
NumIn3:
	JC NumInN
	JMP NumIn
NumInN:
	CLR C
	SUBB A,#30h
	RET
 
;***********
;** Break **
;***********
 
ORG BreakProg
 
Break:
	PUSH IE
	MOV IE,#00h
	PUSH ACC
	PUSH DPL
	PUSH DPH
	MOV DPTR,#DPTRSafe			;DPTR sichern
	POP ACC
	MOVX @DPTR,A
	INC  DPTR
	POP ACC
	MOVX @DPTR,A
	MOV DPTR,#ACCUSafe			;ACCU sichern
	POP ACC
	MOVX @DPTR,A
	MOV DPTR,#IESafe			;IE sichern
	POP ACC
	MOVX @DPTR,A
	MOV DPTR,#PSWSafe			;PSW sichern
	MOV A,PSW
	MOVX @DPTR,A
	MOV DPTR,#SPSafe			;SP sichern
	MOV A,SP
	CLR C
	SUBB A,#02h				;vom SP 2 abziehen, weil darin auch Rücksprungadresse
						;des CALL-Befehls des Abbruchs enthalten ist
	MOVX @DPTR,A
	POP DPH					;Break-Adresse, die von LCALL-Befehl in den Stack
	POP DPL					;geschrieben wurde -> DPTR
	CLR C					;vom DPTR 03h abziehen, da die Adresse am Stack
	MOV A,DPL				;die Adresse nach dem LCALL-Befehl ist.
	SUBB A,#03h
	MOV DPL,A
	MOV A,DPH
	SUBB A,#00h
	MOV DPH,A
	PUSH DPL				;Break-Adresse wieder zurück auf den Stack
	PUSH DPH
	CALL StoreBreak			;DPTR -> Break-Adresse
	CALL ClrBreak				;Break-Befehle im Programm löschen
	CALL ShowReg				;Registerinhalte bei Abbruch anzeigen
	CALL RestoreBreak			;Break-Adresse -> DPTR
	CALL DisASM				;Befehl an Break-Adresse anzeigen
	MOV DPTR,#BreakStr			;Abbruch anzeigen
	CALL StrOut
	JMP Beginn
 
;*********************
;** T a b e l l e n **
;*********************
 
ORG Tabellen
 
;********************
;** Stringtabellen **
;********************
 
ResetStr:
	DB 0Dh,0Ah
	DB 0Dh,0Ah
	DB '       ----------------',0Dh,0Ah
	DB '       |  uP-OS 8052  |',0Dh,0Ah
	DB '       |     V 2.1    |',0Dh,0Ah
	DB '       ----------------',0Dh,0Ah
	DB 0Dh,0Ah
	DB '        Copyright 1996',0Dh,0Ah
	DB 0Dh,0Ah
	DB 'Monitorprogramm fuer uP-8051 Entwicklungs-Kit',0Dh,0Ah
	DB 0Dh,0Ah
	DB 'Monitorprogramm von:',0Dh,0Ah
	DB '          Roland HEINRICH',0Dh,0Ah
	DB 'Entwicklungs-Kit von:',0Dh,0Ah
	DB '          Thomas CLAUSEN & Roland HEINRICH',0Dh,0Ah
	DB 'Projektidee von:',0Dh,0Ah
	DB '          Dipl.Ing. Wilhelm GUGGENBERG',0Dh,0Ah
	DB 'Entwickelt an der:',0Dh,0Ah
	DB '          HTBLA Wien 10, Ettenreichgasse 54',0Dh,0Ah
	DB 00h
 
EingabeStr:
	DB 'Monitor -> '
	DB 00h
 
HelpStr:
	DB 0Dh,0Ah
	DB 0Dh,0Ah
	DB 'Befehlserklaerung:',0Dh,0Ah
	DB 0Dh,0Ah
	DB '   g xxxx    ..
. Programm an der 16-Bit-Adresse xxxx starten',0Dh,0Ah
	DB '   l xxxx    ... 10 Befehle ab der 16-Bit-Adresse xxxx anzeigen',0Dh,0Ah
	DB '   bs xxxx   ..
. Breakpoint auf 16-Bit-Adresse xxxx setzen',0Dh,0Ah
	DB '   bl        ... Breakpoint anzeigen',0Dh,0Ah
	DB '   bd        ..
. Breakpoint loeschen',0Dh,0Ah
	DB '   dc xxxx   ... Byte im Programm-Speicher anzeigen',0Dh,0Ah
	DB '   di xx     ..
. Byte im internen Daten-Speicher anzeigen',0Dh,0Ah
	DB '   dx xxxx   ... Byte im externen Daten-Speicher anzeigen',0Dh,0Ah
	DB '   ec xxxx   ..
. Byte im Programm-Speicher editieren',0Dh,0Ah
	DB '   ei xx     ... Byte im internen Daten-Speicher editieren',0Dh,0Ah
	DB '   ex xxxx   ..
. Byte im externen Daten-Speicher editieren',0Dh,0Ah
	DB '   c         ... Programm nach Abbruch fortsetzen',0Dh,0Ah
	DB '   i         ..
. Programm in IntelHex-Format eingeben',0Dh,0Ah
	DB '   o         ... Optionen fuer Monitor setzen',0Dh,0Ah
	DB '   r         ..
. Software-Reset',0Dh,0Ah
	DB 0Dh,0Ah
	DB 'Alle Adressen muessen in HEX eingegeben werden.',0Dh,0Ah
	DB 'Um die Eingabe von Adressen abzubrechen, ESC-Taste druecken.',0Dh,0Ah
	DB 00h
 
DAktuellStr:
	DB 0Dh,0Ah
	DB 0Dh,0Ah
	DB 'Aktueller Inhalt: '
	DB 00h
 
ENeuStr:
	DB 0Dh,0Ah
	DB 'Neuer Inhalt    : '
	DB 00h
 
BSetStr:
	DB 0Dh,0Ah
	DB 0Dh,0Ah
	DB 'Breakpoint gesetzt.',0Dh,0Ah
	DB 00h
 
BSFehlerStr:
	DB 0Dh,0Ah,0Dh,0Ah
	DB '!! Breakpoint-Adresse ungueltig. !!',0Dh,0Ah
	DB '   Bereich: 8000-86FF / 9000-9FFF',0Dh,0Ah
	DB 00h
 
BListStr:
	DB 0Dh,0Ah,0Dh,0Ah
	DB 'Breakpoint-Adresse: '
	DB 00h
 
BLKeinStr:
	DB 'keine',0Dh,0Ah
	DB 00h
 
BDelStr:
	DB 0Dh,0Ah,0Dh,0Ah
	DB 'Breakpoint-Adresse geloescht.
',0Dh,0Ah
	DB 00h
 
BAktStr:
	DB 0Dh,0Ah
	DB '!! Breakpoint-Adresse gesetzt. !!',0Dh,0Ah
	DB 0Dh,0Ah
	DB 'Return -> aktivieren',0Dh,0Ah
	DB 'ESC    -> nicht aktivieren',0Dh,0Ah
	DB 0Dh,0Ah
	DB 00h
 
BreakStr:
	DB 0Dh,0Ah
	DB '!! Programm abgebrochen. !!',0Dh,0Ah
	DB 0Dh,0Ah
	DB 'c -> Programm fortsetzen',0Dh,0Ah
	DB 00h
 
SRegStr:
	DB 0Dh,0Ah
	DB 0Dh,0Ah
	DB ' A   B   R0  R1  R2  R3  R4  R5  R6  R7  PSW DPTR  SP',0Dh,0Ah
	DB '------------------------------------------------------',0Dh,0Ah
	DB ' '
	DB 00h
 
ContStr:
	DB 0Dh,0Ah
	DB '!! Programm kann nicht fortgesetzt werden. !!',0Dh,0Ah
	DB 00h
 
IAchtungStr:
	DB 0Dh,0Ah,0Dh,0Ah
	DB '!! Altes Programm wird moeglicherweise geloescht. !!',0Dh,0Ah
	DB 0Dh,0Ah
	DB 'Return -> Weiter',0Dh,0Ah
	DB 'ESC    -> Abbruch',0Dh,0Ah
	DB 00h
 
IFehlerStr:
	DB 0Dh,0Ah,0Dh,0Ah
	DB '!! Programm-Adresse ungueltig. !!',0Dh,0Ah
	DB '   Bereich: 8000-86FF / 9000-9FFF',0Dh,0Ah
	DB 00h
 
SResetStr:
	DB 0Dh,0Ah,0Dh,0Ah
	DB '!! Gesamter Programmspeicher, Optionen und der !!',0Dh,0Ah
	DB '!! Breakpoint werden geloescht.
                !!',0Dh,0Ah
	DB 0Dh,0Ah
	DB 'Return -> Weiter',0Dh,0Ah
	DB 'ESC    -> Abbruch',0Dh,0Ah
	DB 00h
 
SRFertigStr:
	DB 0Dh,0Ah
	DB 'Software-Reset beendet.',0Dh,0Ah
	DB 00h
 
OptionStr:
	DB 0Dh,0Ah,0Dh,0Ah
	DB 'Optionen:',0Dh,0Ah
	DB 0Dh,0Ah
	DB 'ESC  ... Zurueck',0Dh,0Ah
	DB 'l xx ..
. Befehlsanzahl bei List aendern',0Dh,0Ah
	DB '         00 = Default (10h Befehle)',0Dh,0Ah
	DB 's xx ... Serielle Schnittstelle aender',0Dh,0Ah
	DB '         00 = simuliert auf Port P1',0Dh,0Ah
	DB '         01 = simuliert auf Port PA',0Dh,0Ah
	DB '         02 = nicht simulierte',0Dh,0Ah
	DB 0Dh,0Ah
	DB 'Werte sind immer im Hex-Format einzugeben.',0Dh,0Ah
	DB 0Dh,0Ah
	DB 'List-Befehlsanzahl: '
	DB 00h
 
Option1Str:
	DB 0Dh,0Ah
	DB 'Serielle Schnittstelle: '
	DB 00h
 
OEingabeStr:
	DB 0Dh,0Ah,0Dh,0Ah
	DB 'Optionen -> '
	DB 00h
 
OResetStr:
	DB 0Dh,0Ah,0Dh,0Ah
	DB 'Jumperstellung aendern und Hardware-Reset durchfuehren.
',0Dh,0Ah
	DB 00h
 
;********************
;** Nummertabellen **
;******************** 
CurNum:
	DB 41h,42h,43h,44h,48h,59h
 
BefehlNum:
	DW Ins00,Ins01,Ins02,Ins03,Ins04,Ins05,Ins06,Ins07,Ins08,Ins09,Ins0A,Ins0B,Ins0C,Ins0D,Ins0E,Ins0F
	DW Ins10,Ins11,Ins12,Ins13,Ins14,Ins15,Ins16,Ins17,Ins18,Ins19,Ins1A,Ins1B,Ins1C,Ins1D,Ins1E,Ins1F
	DW Ins20,Ins01,Ins22,Ins23,Ins24,Ins25,Ins26,Ins27,Ins28,Ins29,Ins2A,Ins2B,Ins2C,Ins2D,Ins2E,Ins2F
	DW Ins30,Ins11,Ins32,Ins33,Ins34,Ins35,Ins36,Ins37,Ins38,Ins39,Ins3A,Ins3B,Ins3C,Ins3D,Ins3E,Ins3F
	DW Ins40,Ins01,Ins42,Ins43,Ins44,Ins45,Ins46,Ins47,Ins48,Ins49,Ins4A,Ins4B,Ins4C,Ins4D,Ins4E,Ins4F
	DW Ins50,Ins11,Ins52,Ins53,Ins54,Ins55,Ins56,Ins57,Ins58,Ins59,Ins5A,Ins5B,Ins5C,Ins5D,Ins5E,Ins5F
	DW Ins60,Ins01,Ins62,Ins63,Ins64,Ins65,Ins66,Ins67,Ins68,Ins69,Ins6A,Ins6B,Ins6C,Ins6D,Ins6E,Ins6F
	DW Ins70,Ins11,Ins72,Ins73,Ins74,Ins75,Ins76,Ins77,Ins78,Ins79,Ins7A,Ins7B,Ins7C,Ins7D,Ins7E,Ins7F
	DW Ins80,Ins01,Ins82,Ins83,Ins84,Ins85,Ins86,Ins87,Ins88,Ins89,Ins8A,Ins8B,Ins8C,Ins8D,Ins8E,Ins8F
	DW Ins90,Ins11,Ins92,Ins93,Ins94,Ins95,Ins96,Ins97,Ins98,Ins99,Ins9A,Ins9B,Ins9C,Ins9D,Ins9E,Ins9F
	DW InsA0,Ins01,InsA2,InsA3,InsA4,InsA5,InsA6,InsA7,InsA8,InsA9,InsAA,InsAB,InsAC,InsAD,InsAE,InsAF
	DW InsB0,Ins11,InsB2,InsB3,InsB4,InsB5,InsB6,InsB7,InsB8,InsB9,InsBA,InsBB,InsBC,InsBD,InsBE,InsBF
	DW InsC0,Ins01,InsC2,InsC3,InsC4,InsC5,InsC6,InsC7,InsC8,InsC9,InsCA,InsCB,InsCC,InsCD,InsCE,InsCF
	DW InsD0,Ins11,InsD2,InsD3,InsD4,InsD5,InsD6,InsD7,InsD8,InsD9,InsDA,InsDB,InsDC,InsDD,InsDE,InsDF
	DW InsE0,Ins01,InsE2,InsE3,InsE4,InsE5,InsE6,InsE7,InsE8,InsE9,InsEA,InsEB,InsEC,InsED,InsEE,InsEF
	DW InsF0,Ins11,InsF2,InsF3,InsF4,InsF5,InsF6,InsF7,InsF8,InsF9,InsFA,InsFB,InsFC,InsFD,InsFE,InsFF
 
;********************
;** Befehlstabelle **
;********************
 
Ins00:		DB 'NOP',00h
Ins01:		DB 'AJMP  ',04h,00h
Ins02:		DB 'LJMP  ',02h,00h
Ins03:		DB 'RR    A',00h
Ins04:		DB 'INC   A',00h
Ins05:		DB 'INC   ',01h,00h
Ins06:		DB 'INC   @R0',00h
Ins07:		DB 'INC   @R1',00h
Ins08:		DB 'INC   R0',00h
Ins09:		DB 'INC   R1',00h
Ins0A:		DB 'INC   R2',00h
Ins0B:		DB 'INC   R3',00h
Ins0C:		DB 'INC   R4',00h
Ins0D:		DB 'INC   R5',00h
Ins0E:		DB 'INC   R6',00h
Ins0F:		DB 'INC   R7',00h
 
Ins10:		DB 'JBC   ',01h,',',03h,00h
Ins11:		DB 'ACALL ',04h,00h
Ins12:		DB 'LCALL ',02h,00h
Ins13:		DB 'RRC   A',00h
Ins14:		DB 'DEC   A',00h
Ins15:		DB 'DEC   ',01h,00h
Ins16:		DB 'DEC   @R0',00h
Ins17:		DB 'DEC   @R1',00h
Ins18:		DB 'DEC   R0,',00h
Ins19:		DB 'DEC   R1,',00h
Ins1A:		DB 'DEC   R2,',00h
Ins1B:		DB 'DEC   R3,',00h
Ins1C:		DB 'DEC   R4,',00h
Ins1D:		DB 'DEC   R5,',00h
Ins1E:		DB 'DEC   R6,',00h
Ins1F:		DB 'DEC   R7,',00h
 
Ins20:		DB 'JB    ',01h,',',03h,00h
Ins22:		DB 'RET',00h
Ins23:		DB 'RL    A',00h
Ins24:		DB 'ADD   A,#',01h,00h
Ins25:		DB 'ADD   A,',01h,00h
Ins26:		DB 'ADD   A,@R0',00h
Ins27:		DB 'ADD   A,@R1',00h
Ins28:		DB 'ADD   A,R0',00h
Ins29:		DB 'ADD   A,R1',00h
Ins2A:		DB 'ADD   A,R2',00h
Ins2B:		DB 'ADD   A,R3',00h
Ins2C:		DB 'ADD   A,R4',00h
Ins2D:		DB 'ADD   A,R5',00h
Ins2E:		DB 'ADD   A,R6',00h
Ins2F:		DB 'ADD   A,R7',00h
 
Ins30:		DB 'JNB   ',01h,',',03h,00h
Ins32:		DB 'RETI',00h
Ins33:		DB 'RLC   A',00h
Ins34:		DB 'ADDC  A,#',01h,00h
Ins35:		DB 'ADDC  A,',01h,00h
Ins36:		DB 'ADDC  A,@R0',00h
Ins37:		DB 'ADDC  A,@R1',00h
Ins38:		DB 'ADDC  A,R0',00h
Ins39:		DB 'ADDC  A,R1',00h
Ins3A:		DB 'ADDC  A,R2',00h
Ins3B:		DB 'ADDC  A,R3',00h
Ins3C:		DB 'ADDC  A,R4',00h
Ins3D:		DB 'ADDC  A,R5',00h
Ins3E:		DB 'ADDC  A,R6',00h
Ins3F:		DB 'ADDC  A,R7',00h
 
Ins40:		DB 'JC    ',03h,00h
Ins42:		DB 'ORL   ',01h,',A',00h
Ins43:		DB 'ORL   ',01h,',#',01h,00h
Ins44:		DB 'ORL   A,#',01h,00h
Ins45:		DB 'ORL   A,',01h,00h
Ins46:		DB 'ORL   A,@R0',00h
Ins47:		DB 'ORL   A,@R1',00h
Ins48:		DB 'ORL   A,R0',00h
Ins49:		DB 'ORL   A,R1',00h
Ins4A:		DB 'ORL   A,R2',00h
Ins4B:		DB 'ORL   A,R3',00h
Ins4C:		DB 'ORL   A,R4',00h
Ins4D:		DB 'ORL   A,R5',00h
Ins4E:		DB 'ORL   A,R6',00h
Ins4F:		DB 'ORL   A,R7',00h
 
Ins50:		DB 'JNC   ',03h,00h
Ins52:		DB 'ANL   ',01h,',A',00h
Ins53:		DB 'ANL   ',01h,',#',01h,00h
Ins54:		DB 'ANL   A,#',01h,00h
Ins55:		DB 'ANL   A,',01h,00h
Ins56:		DB 'ANL   A,@R0',00h
Ins57:		DB 'ANL   A,@R1',00h
Ins58:		DB 'ANL   A,R0',00h
Ins59:		DB 'ANL   A,R1',00h
Ins5A:		DB 'ANL   A,R2',00h
Ins5B:		DB 'ANL   A,R3',00h
Ins5C:		DB 'ANL   A,R4',00h
Ins5D:		DB 'ANL   A,R5',00h
Ins5E:		DB 'ANL   A,R6',00h
Ins5F:		DB 'ANL   A,R7',00h
 
Ins60:		DB 'JZ    ',03h,00h
Ins62:		DB 'XRL   ',01h,',A',00h
Ins63:		DB 'XRL   ',01h,',#',01h,00h
Ins64:		DB 'XRL   A,#',01h,00h
Ins65:		DB 'XRL   A,',01h,00h
Ins66:		DB 'XRL   A,@R0',00h
Ins67:		DB 'XRL   A,@R1',00h
Ins68:		DB 'XRL   A,R0',00h
Ins69:		DB 'XRL   A,R1',00h
Ins6A:		DB 'XRL   A,R2',00h
Ins6B:		DB 'XRL   A,R3',00h
Ins6C:		DB 'XRL   A,R4',00h
Ins6D:		DB 'XRL   A,R5',00h
Ins6E:		DB 'XRL   A,R6',00h
Ins6F:		DB 'XRL   A,R7',00h
 
Ins70:		DB 'JNZ   ',03h,00h
Ins72:		DB 'ORL   C,',01h,00h
Ins73:		DB 'JMP   @A+DPTR',00h
Ins74:		DB 'MOV   A,#',01h,00h
Ins75:		DB 'MOV   ',01h,',#',01h,00h
Ins76:		DB 'MOV   @R0,#',01h,00h
Ins77:		DB 'MOV   @R1,#',01h,00h
Ins78:		DB 'MOV   R0,#',01h,00h
Ins79:		DB 'MOV   R1,#',01h,00h
Ins7A:		DB 'MOV   R2,#',01h,00h
Ins7B:		DB 'MOV   R3,#',01h,00h
Ins7C:		DB 'MOV   R4,#',01h,00h
Ins7D:		DB 'MOV   R5,#',01h,00h
Ins7E:		DB 'MOV   R6,#',01h,00h
Ins7F:		DB 'MOV   R7,#',01h,00h
 
Ins80:		DB 'SJMP  ',03h,00h
Ins82:		DB 'ANL   C,',01h,00h
Ins83:		DB 'MOVC  A,@A+PC',00h
Ins84:		DB 'DIV   AB',00h
Ins85:		DB 'MOV   ',01h,',',01h,00h
Ins86:		DB 'MOV   ',01h,',@R0',00h
Ins87:		DB 'MOV   ',01h,',@R1',00h
Ins88:		DB 'MOV   ',01h,',R0',00h
Ins89:		DB 'MOV   ',01h,',R1',00h
Ins8A:		DB 'MOV   ',01h,',R2',00h
Ins8B:		DB 'MOV   ',01h,',R3',00h
Ins8C:		DB 'MOV   ',01h,',R4',00h
Ins8D:		DB 'MOV   ',01h,',R5',00h
Ins8E:		DB 'MOV   ',01h,',R6',00h
Ins8F:		DB 'MOV   ',01h,',R7',00h
 
Ins90:		DB 'MOV   DPTR,#',02h,00h
Ins92:		DB 'MOV   ',01h,',C',00h
Ins93:		DB 'MOVC  A,@A+DPTR',00h
Ins94:		DB 'SUBB  A,#',01h,00h
Ins95:		DB 'SUBB  A,',01h,00h
Ins96:		DB 'SUBB  A,@R0',00h
Ins97:		DB 'SUBB  A,@R1',00h
Ins98:		DB 'SUBB  A,R0',00h
Ins99:		DB 'SUBB  A,R1',00h
Ins9A:		DB 'SUBB  A,R2',00h
Ins9B:		DB 'SUBB  A,R3',00h
Ins9C:		DB 'SUBB  A,R4',00h
Ins9D:		DB 'SUBB  A,R5',00h
Ins9E:		DB 'SUBB  A,R6',00h
Ins9F:		DB 'SUBB  A,R7',00h
 
InsA0:		DB 'ORL   C,/',01h,00h
InsA2:		DB 'MOV   C,',01h,00h
InsA3:		DB 'INC   DPTR',00h
InsA4:		DB 'MUL   AB',00h
InsA5:		DB 'No Instr',00h
InsA6:		DB 'MOV   @R0,',01h,00h
InsA7:		DB 'MOV   @R1,',01h,00h
InsA8:		DB 'MOV   R0,',01h,00h
InsA9:		DB 'MOV   R1,',01h,00h
InsAA:		DB 'MOV   R2,',01h,00h
InsAB:		DB 'MOV   R3,',01h,00h
InsAC:		DB 'MOV   R4,',01h,00h
InsAD:		DB 'MOV   R5,',01h,00h
InsAE:		DB 'MOV   R6,',01h,00h
InsAF:		DB 'MOV   R7,',01h,00h
 
InsB0:		DB 'ANL   C,/',01h,00h
InsB2:		DB 'CPL   ',01h,00h
InsB3:		DB 'CPL   C',00h
InsB4:		DB 'CJNE  A,#',01h,',',03h,00h
InsB5:		DB 'CJNE  A,',01h,',',03h,00h
InsB6:		DB 'CJNE  @R0,#',01h,',',03h,00h
InsB7:		DB 'CJNE  @R1,#',01h,',',03h,00h
InsB8:		DB 'CJNE  R0,#',01h,',',03h,00h
InsB9:		DB 'CJNE  R1,#',01h,',',03h,00h
InsBA:		DB 'CJNE  R2,#',01h,',',03h,00h
InsBB:		DB 'CJNE  R3,#',01h,',',03h,00h
InsBC:		DB 'CJNE  R4,#',01h,',',03h,00h
InsBD:		DB 'CJNE  R5,#',01h,',',03h,00h
InsBE:		DB 'CJNE  R6,#',01h,',',03h,00h
InsBF:		DB 'CJNE  R7,#',01h,',',03h,00h
 
InsC0:		DB 'PUSH  ',01h,00h
InsC2:		DB 'CLR   ',01h,00h
InsC3:		DB 'CLR   C',00h
InsC4:		DB 'SWAP  A',00h
InsC5:		DB 'XCH   A,',01h,00h
InsC6:		DB 'XCH   A,@R0',00h
InsC7:		DB 'XCH   A,@R1',00h
InsC8:		DB 'XCH   A,R0',00h
InsC9:		DB 'XCH   A,R1',00h
InsCA:		DB 'XCH   A,R2',00h
InsCB:		DB 'XCH   A,R3',00h
InsCC:		DB 'XCH   A,R4',00h
InsCD:		DB 'XCH   A,R5',00h
InsCE:		DB 'XCH   A,R6',00h
InsCF:		DB 'XCH   A,R7',00h
 
InsD0:		DB 'POP   ',01h,00h
InsD2:		DB 'SETB  ',01h,00h
InsD3:		DB 'SETB  C',00h
InsD4:		DB 'DA    A',00h
InsD5:		DB 'DJNZ  ',01h,',',03h,00h
InsD6:		DB 'XCHD  A,@R0',00h
InsD7:		DB 'XCHD  A,@R1',00h
InsD8:		DB 'DJNZ  R0,',03h,00h
InsD9:		DB 'DJNZ  R1,',03h,00h
InsDA:		DB 'DJNZ  R2,',03h,00h
InsDB:		DB 'DJNZ  R3,',03h,00h
InsDC:		DB 'DJNZ  R4,',03h,00h
InsDD:		DB 'DJNZ  R5,',03h,00h
InsDE:		DB 'DJNZ  R6,',03h,00h
InsDF:		DB 'DJNZ  R7,',03h,00h
 
InsE0:		DB 'MOVX  A,@DPTR',00h
InsE2:		DB 'MOVX  A,@R0',00h
InsE3:		DB 'MOVX  A,@R1',00h
InsE4:		DB 'CLR   A',00h
InsE5:		DB 'MOV   A,',01h,00h
InsE6:		DB 'MOV   A,@R0',00h
InsE7:		DB 'MOV   A,@R1',00h
InsE8:		DB 'MOV   A,R0',00h
InsE9:		DB 'MOV   A,R1',00h
InsEA:		DB 'MOV   A,R2',00h
InsEB:		DB 'MOV   A,R3',00h
InsEC:		DB 'MOV   A,R4',00h
InsED:		DB 'MOV   A,R5',00h
InsEE:		DB 'MOV   A,R6',00h
InsEF:		DB 'MOV   A,R7',00h
 
InsF0:		DB 'MOVX  @DPTR,A',00h
InsF2:		DB 'MOVX  @R0,A',00h
InsF3:		DB 'MOVX  @R1,A',00h
InsF4:		DB 'CPL   A',00h
InsF5:		DB 'MOV   ',01h,',A',00h
InsF6:		DB 'MOV   @R0,A',00h
InsF7:		DB 'MOV   @R1,A',00h
InsF8:		DB 'MOV   R0,A',00h
InsF9:		DB 'MOV   R1,A',00h
InsFA:		DB 'MOV   R2,A',00h
InsFB:		DB 'MOV   R3,A',00h
InsFC:		DB 'MOV   R4,A',00h
InsFD:	&
| Anmerkungen: | 
 | impressum | datenschutz
© Copyright Artikelpedia.com