MTB/DAUASM 
 
 
 
 
;***************************************
;
;
;DAU-Test durch internen Komparator
;
;
;10 BIT-Umsetzung
;
;Komparatorfunktion:UX<UY  E3H  0
;		    UX>UY  FFH  1
;
;***************************************
 
VERT	EQU	0F003H	;SYSTEMVERTEILER
FEHLER	EQU	0C01DH	;FEHLER-UP
STR	EQU	0E3H	;STRUKTURBYTE
			;KOMP.-WERT 0
ANFX	EQU	002H	;ANFANGSWERT X
ANFY	EQU	008H	;ANFANGSWERT Y
ANZ	EQU	7F0CH	;WERTEZAEHLER
			;7F=127 REF.-
			;Werte
			;0C=12 Ver-
			;gleichswerte /
			;Referenz
ABR	EQU	0CH	;Abbruchz{hler
			;Werte/Ref.
ADD	EQU	08H	;REF=REF+ADD
GRENZ	EQU	04H	;Grenzwert X
DX	EQU	44H	;I/O Kanal X
			;Register 1
DY	EQU	45H	;I/O Kanal Y
			;Register 2
DXY	EQU	46H	;I/O Kanal XY
			;Register 2 U. 3
DR	EQU	47H	;Relais
 
;***************************************
;	HAUPTPROGRAMM
;***************************************
 
	ORG	XXXXH
 
DAU:	CALL	INIT	;Initialisierung
	CALL	OUT	;Kanalausgabe
	LD	HL,ANFX
	LD	DE,ANFY
	LD	BC,ANZ
KO1:	XOR	A
	EX	AF,AF'	;AF'=0
	PUSH	HL	;X-Wert
KO2:	PUSH	BC	;Z{hler
	PUSH	HL	;X-Wert
	PUSH	DE	;Y-Wert
	EX	DE,HL
	PUSH	DE
	LD	C,000H
	CALL	SETY	;Berechne Y-Wert
	POP	HL
	CALL	SETX	;Berechne X-Wert
	CALL	OUT	;Kanalausgabe
	LD	A,1	;Wait
	CALL	VERT
	DEFB	14H
	IN	A,DR	;Komparatorwert
			;lesen
	CP 	STR
	JR	NZ,KOK	;UX>UY
	EX	AF,AF'
	OR	1	;AF'=1 wenn E3
	EX	AF,AF'
	POP	DE
	POP	HL	;X-Wert
	INC	HL	;X=X+1
	POP	BC
	DEC	C	;Abbruchz{hler
			;-1
	JR	NZ,KO2
	POP	HL
KOER:	CALL	FEHLER	;Fehler
	RET
 
KOK:	EX	AF,AF'
	CP	1	;war vorher E3 ?
	JR	Z,KOK1
KOK12:	POP	DE
	POP	HL
	POP	BC
	JR	KOER	;Fehler
 
KOK1:	POP	HL	;Y
	POP	DE	;X
	PUSH	DE
	PUSH	HL
	PUSH	DE
	PUSH	HL
	LD	BC,GRENZ
	XOR	A
	SBC	HL,BC	;Y-GRENZ
	EX	DE,HL
	XOR	A
	SBC	HL,DE	;X-(Y-GRENZ)
	JR	C,KOK21
	POP	HL	;Y
	ADD	HL,BC	;Y+GRENZ
	POP	DE	;X
	XOR	A
	SBC	HL,DE	;(Y+GRENZ)-X
	JR	C,KOK12
	JR	KOK22
KOK21:	POP	HL
	POP	DE
	JR	KOK12
 
KOK22:	POP	HL	;Y-WERT
	LD	DE,ADD
	ADD	HL,DE
	EX	DE,HL	;Y=Y+40H
	POP	HL
	POP	BC
	POP	HL	;X-Wert
	PUSH	DE
	LD	DE,ADD
	ADD	HL,DE	;X=X+40H
	POP	DE
	LD	C,ABR	;Abbruchz{hler
			;aktualisieren
	DJNZ	KO1
	XOR	A
	OUT	DR,A	;Relais off
 
	RET
 
;***************************************
;	MODUL SCHALTEN
;PE:D	STEUERBYTE
;***************************************
 
;MODU:	LD	L,MODSCH
;	LD	A,2
;	LD	E,D
;	CALL	VERT
;	DEFB	26H
;	RET
 
;***************************************
;	INITIALISIERUNG
;KANAL X U. Y  NULLSETZEN
;***************************************
 
INIT:	LD	D,080H
	LD	E,D
	LD	C,000H
	RET
 
;***************************************
;	Kanalausgabe
;
;D:=X-REGISTER
;E:=Y-REGISTER
;C:=XY-REGISTER
;***************************************
 
OUT:	LD	A,D
	OUT	DX,A
	LD	A,E
	OUT	DY,A
	LD	A,C
	OUT	DXY,A
	RET
 
;***************************************
;	Berechne X-Kanalregisterwert
;PE:HL	X-Wert
;PA:DC	X-Registerwert
;***************************************
 
SETX:	PUSH	HL
	LD	A,L
	SLA	A
	RL 	H
	SLA	A
	RL 	H
	LD	B,004H
SX1:	RLA
	RL 	H
	DJNZ	SX1
	LD	D,H
	LD	B,004H
SX2:	RLCA
	DJNZ	SX2
	AND	00FH
	OR	C
	LD	C,A
	POP	HL
	RET
 
;***************************************
;	Berechne Y-Kanalregisterwert
;PE:HL	Y-Wert
;PA:EC	Y-Registerwert
;***************************************
 
SETY:	PUSH	HL
	LD	A,L
	SLA	A
	RL 	H
	SLA	A
	RL 	H
	LD	B,004H
SY1	RLA
	RL 	H
	DJNZ	SY1
	LD	E,H
	AND	0F0H
	OR	C
	LD	C,A
	POP	HL
	RET
 
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ