; Luftraumcheckroutine fr
; Fantisofts Fluglotsensimulator

; 26.03.1990 in Spanien

; Rckgabe in D0 enthlt 0 = alles ok
;                        1 = Warnung
;                        2 = Unfall
	TEXT
;  4(SP) = ANZAHL
;  8(SP) = ADRESSE DES X-KOORDINATENFELDES
; 12(SP) = ADRESSE DES Y-KOORDINATENFELDES
; 16(SP) = ADRESSE DES H-KOORDINATENFELDES
; 20(SP) = ADRESSE DES GESCHWINDIGKEITFELDES
; 24(SP) = MINIMALE ENTFERNUNG
; 28(SP) = UNFALLENTFERNUNG
; 32(SP) = FLUGZEUG NR 1 MIT WARNUNG ODER UNFALL
; 36(SP) = FLUGZEUG NR 2 MIT WARNUNG ODER UNFALL

	MOVE.L	#0,D0	; Luftraum OK
	
	MOVE.L	4(SP),D1
	SUBI.L	#1,D1
OSCHLEI			; Obere Schleife ber alle Flugzeuge

	MOVE.L	20(SP),A2 ; Geschwindigkeit von A ermitteln
	MOVE.W	D1,D3
	ROL.W	#2,D3
	MOVE.L	0(A2,D3.W),D5
	CMPI.L	#0,D5
	BEQ 	NOAIR	; Innere Schleife nicht durchlaufen

	MOVE.L	D1,D2
	SUB.L	#1,D2
USCHLEI			; Untere Schleife

	MOVE.L	20(SP),A2 ; Geschwindigkeit von B ermitteln
	MOVE.W	D2,D4
	ROL.W	#2,D4
	MOVE.L	0(A2,D4.W),D5
	CMPI.L	#0,D5
	BEQ	NOPRUEF	; Nicht berprfen

	MOVE.L	8(SP),A2  ; X Abstand ermitteln
	MOVE.L	0(A2,D3.W),D5
	MOVE.L	0(A2,D4.W),D6
	CMP.L	D5,D6
	BGT	NO_DREH1
	BSR	DREHEN
NO_DREH1	SUB.L	D5,D6
	MOVE.L	D6,D7

	MOVE.L	12(SP),A2	; Y Abstand ermitteln
	MOVE.L	0(A2,D3.W),D5
	MOVE.L	0(A2,D4.W),D6
	CMP.L	D5,D6
	BGT	NO_DREH2
	BSR	DREHEN
NO_DREH2	SUB.L	D5,D6
	ADD.L	D6,D7

	MOVE.L	16(SP),A2	; Hhen Abstand ermitteln
	MOVE.L	0(A2,D3.W),D5
	MOVE.L	0(A2,D4.W),D6
	CMP.L	D5,D6
	BGT	NO_DREH3
	BSR	DREHEN
NO_DREH3	SUB.L	D5,D6
	DIVU	#20,D6
	ADD.W	D6,D7	; In D7 jetzt der Abstand

	MOVE.L	28(SP),D4	; Unfallentfernung
	CMP.L	D7,D4
	BGT	UNFALL

	MOVE.L	24(SP),D4	; Minimale Entfernung
	CMP.L	D7,D4
	BGT	WARNUNG

NACH_WARNUNG		; Rcksprung nach Warnung

NOPRUEF			; Keine berprfung, da Geschw 0 bei B

	DBRA	D2,USCHLEI

NOAIR			; Kein Test erfolgt, da Geschw 0 bei A

	SUBI.L	#1,D1
	CMPI.L	#0,D1
	BNE	OSCHLEI

	RTS

DREHEN	; Austausch von D5 und D6 mit Hilfe von D7
	MOVE.L	D5,A0
	MOVE.L	D6,D5
	MOVE.L	A0,D6
	RTS

WARNUNG	; D2 und D1 sind sich zu nahe
	MOVE.L	32(SP),A2 ; Unter der Adresse wird die
	MOVE.L	D1,(A2)	; Variable gendert
	MOVE.L	36(SP),A2
	MOVE.L	D2,(A2)
	MOVE.L	#1,D0
	BRA	NACH_WARNUNG

UNFALL	; D2 und D1 haben einen Unfall
	MOVE.L	32(SP),A2 ; Unter der Adresse wird die
	MOVE.L	D1,(A2)	; Variable gendert
	MOVE.L	36(SP),A2
	MOVE.L	D2,(A2)
	MOVE.L	#2,D0
	RTS

	END

