;**************************************************************************
;
; Filename : ANRUF.ASM
; --------------------
;
; (c) 1990 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; Anruferkennung
;
;
;**************************************************************************

MODUL_START	set	*		; Größe des Moduls berechnen

; =========================================================================
;
; Funktion	: Anruf testen
;
; Eingang	: zyklisch von Hauptprg.-Schleife
;
; Ausgang	: Anruf-BIT=1 solange der Anruf erkannt wird
;
; Register	: Accu
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

tst_anr	lda Via_portb		; Zustand der VIA einlesen
	bit #ANR		; steht Anruf an ?
	bne anr_timeout		; nein, Timeout testen

	; programmierbaren Port bei Anruf einschalten
	; -------------------------------------------
	lda rel_tab+ANR_REL		; Relais aus Ber. holen
	jsr port_on		; Port setzen

	; Anruf aktiv eintragen
	; ---------------------
tst_anr_1	smb ST_ANRSU,su_stat	; Anruf eintragen
	smb ST_SU,su_stat		; Summer einschalten
	smb ST_ANRLED,su_stat	; Anruf eintragen, Ltg. LED einschalten
	lda #ANRIMP_TIM		; Timerwert Überbrückung Anrufimpuls laden
	sta struct_tim+ANRIMP_TIM_O	; und Timer starten

	lda #ANR_TIM		; Timerwert Anrufüberbrückung laden
	sta struct_tim100+ANR_TIM_O	; und Timer starten
tst_anr_end	rts


	; Relais bei Anruf ausschalten
	; ----------------------------
anr_timeout	bbr ST_ANRSU,su_stat,tst_anr_end	; kein Anruf aktiv

	lda rel_tab+ANR_REL	; Relais aus Ber. holen
	jsr port_off		; Port löschen


	; Anrufimpuls Überbrückung testen
	; -------------------------------
anr_tout_1	lda struct_tim+ANRIMP_TIM_O	; Anruftimer abgelaufen ?
	bne tst_anr_end		; nein, Ende

	rmb ST_ANRSU,su_stat	; Anruf austragen
	rmb ST_SU,su_stat		; Summer ausschalten
	rts


; =========================================================================
;
; Funktion	: Anruf-BIT testen und Leitungs-LED schalten
;
; Eingang	: wird zyklisch von Haupt-Prg.-Schleife aufgerufen
;
; Ausgang	: Ltg.-LED bei Anruf eingeschaltet
;	: Ltg.-LED nach Anrufüberbrückunszeit ausgeschaltet
;
; Register	: Accu
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

anr_led	bbs ST_ANRLED,su_stat,anr_led_1	; Anruf-LED testen

anr_led_end	rts			; kein Anruf, Ende


anr_led_1	bbs ST_ALD_ON,su_stat,anr_led_2	; LED ist eingeschaltet

	; Anruf-LED einschalten
	; ---------------------
	smb ST_ALD_ON,su_stat	; LED eingeschaltet eintragen
	ldy #LD_L|LD_N		; Statusbyte laden

	lda #KEY_LTG		; Tastenwert für Leitungstaste laden
	jmp set_prgled		; alle zum Tastenwert gehörenden LED`s ein


	; Anruf-LED ausschalten
	; ---------------------
anr_led_2	lda struct_tim100+ANR_TIM_O	; Anrufüberbrückung beendet ?
	bne anr_led_end		; nein, Ende

	rmb ST_ANRLED,su_stat	; Anruf-LED austragen
	rmb ST_ALD_ON,su_stat	; LED ausgeschaltet eintragen

	; Anzahl Anrufe erhöhen
	; ---------------------
	?inc16 struct_stat+STAT_ANR	; Anzahl Anrufe+1

anr_led_3	bbs LTG_BEL,ltg_stat,anr_led_end	; Ltg. ist bereits belegt


	; ===========================
	; Anruf wurde nicht abgefragt
	; ===========================

	; Anzahl nicht abgefragter Anrufe erhöhen
	; ---------------------------------------
	inc struct_stat+STAT_NANR	; Anzahl Anrufe+1

	; Anruf LED ausschalten
	; ---------------------
	ldy #LD_L|LD_OFF		; LED-Wert laden
	lda #KEY_LTG		; Tastenwert für Leitungstaste laden
	jmp set_prgled		; alle zum Tastenwert gehörenden LED`s aus


; =========================================================================
;
; Funktion	: Anzahl der nicht abgefragten Anrufe über LED`s anzeigen
;
; Eingang	: jede Sekunde bei Ausgabe der Anrufe im Display
;
; Ausgang	: LED`s je nach Anzahl der Anrufe geschaltet wenn berechtigt
;
; Register	: Accu, X
;
; (c) by Thomas Lehmann Mai 1990
;
; =========================================================================

nanr_led	bbs DIP_ANRLED,dip_stat,nanr_end	; LED`s einschalten nicht ber.

	ldx #ANZ_ANR_LED		; Anzahl der LED-Anzeigen für Anrufe laden
	lda #$00		; Wert für LED aus laden

	; LED`s ein/ausschalten
	; ---------------------
nanr_led_lp	dex			; nächste LED einstellen
	bmi nanr_end		; alle LED`s geschaltet, Ende

	cpx struct_stat+STAT_NANR	; 1. eingeschaltetet LED ?
	bcs nanr_led_1		; nein, LED ausschalten

	lda #$ff		; LED-Wert für ein laden
nanr_led_1	sta led_ram,x		; LED schalten
	bra nanr_led_lp

nanr_end	rts



; --------------------------------------------------------------------------

HLP	set	*
_ANRUF	equ	HLP-MODUL_START		; Größe des Moduls

