;**************************************************************************
;
; Filename : FUNKTAST.ASM
; -----------------------
;
; (c) 1990/91 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; Funktionstasten
;
;
;**************************************************************************


MODUL_START	set	*	; Größe des Moduls berechnen

; =========================================================================
;
; Funktion	: Freisprech bzw. Lauthörtaste auswerten
;	  Freisprechen wird durch zweimaliges Betätigen bei
;	  ausgehangenem GU aktiviert
;
;	  GU eingehangen -> rmb ST_GU,feap_stat
;	  folgende Funktion der FS bzw. LH Einrichtung:
;	  ---------------------------------------------
; FS_TASTE	:	FS deaktiv:
;		GU eingehangen ->  LTG. bel., FS ein, LED rechts
;		GU ausgehoben  ->  LTG. bel., FS ein, LED links
;
; FS_TASTE	:	FS aktiv:
;		GU eingehangen ->  nichts
;		GU ausgehoben  ->  FS aus, LED`s aus
;
;
; GU	:	GU aushängen ->
;			FS aus, LED`s aus
;
; 		GU einhängen ->
;		 	FS aktiv	: nichts
;			FS deaktiv : Ltg. trennen
;
; Ltg bel.	:	GU eingehangen ->
;		 	FS ein, LED rechts
; 		GU ausgehoben ->
;		 	nichts
;
;
;
; Eingang	: bei Freisprechtaste
;
; Ausgang	: Freisprechen ein/ausgeschaltet
;
; Register	: Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

key_fslh	bbr ST_FSLH,feap_stat,fslh_on_1	; FS ist aus


	; ======================
	; Freisprechen ist aktiv
	; ======================
	bbr ST_GU,feap_stat,fslh_end	; GU ist eingehangen
	bbr DIP_FS,dip_stat,fslh_1	; Fernsprecher mit Lauthören
	bbs DIP_FS_MOD,dip_stat,fslh_1	; normale FS Funktion

	inc fs_stat
	lda fs_stat
	cmp #2
	bcc fslh_end	; nein jetzt FS, noch nicht trennen

	stz fs_stat


fslh_1	rmb ST_FSLH,feap_stat	; FS/LH ausschalten
	rts



	; =====================================
	; Freisprechen ist deaktiv, einschalten
	; =====================================
fslh_on_1	bbs LTG_DURCH,ltg_stat,fslh_on_2	; Ltg. ist bereits belegt

	jsr key_ltg	; Comfortanschaltung bei FS-Taste

fslh_on_2	smb ST_FSLH,feap_stat	; FS/LH einschalten
fslh_end	rts


; =========================================================================
;
; Funktion	: Erde wählen, durch Taste oder Zielstring
; 	: Relais für Erdtaste 500mS angezogen
;
; Eingang	: bei Wahl und Erdziffer
;
; Ausgang	: ------
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann Mai 1990
;
; =========================================================================

wahl_erde
	block
	lda #KEY_ERDE	; Tastenwert der ERDTASTE laden
	ldx #$fe	; Offset auf Tastenberechtigung, erster TW
	ldy #$ff	; nur nach TW suchen
	jsr search_key	; Erdtaste suchen
	bcc end		; Taste nicht gefunden

	; Erdtaste gefunden, Relais einschalten
	; -------------------------------------
erde_found	lda tast_tab+1,x	; Relais laden
	sta erd_rel	; Relais für Erdtaste merken
	jsr port_on	; Port setzen

	lda #ERD_TIM	; Timerwert Erde wählen laden
	sta struct_tim100+ERD_TIM_O	; Timer starten
	smb WHL_ERDE,ltg_stat	; Erde wird gewählt eintragen
end	rts
	bend




; =========================================================================
;
; Funktion	: Taster simulieren
;
; Eingang	: bei Taster oder Erdtaste
;	: Offset auf Tastaturtabelle in X-Reg.
;	: Tastenwert im Accu
;
; Ausgang	: bei Taster :
;	: ------------
;	: frei progr. Relais für Dauer des Tastendrucks eingeschaltet
;
;	: bei Erdtaste :
;	: --------------
;	: Comfortanschaltung
;	: oder auf Namentaste gespeichert
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann Mai 1990
;
; =========================================================================

key_erde	lda #ERD_ZIFF	; Wert für Erdtaste laden
	bbr MOD_SP,modus,key_erd_1	; Speichern nicht aktiv

	jmp wta_spnam	; Erdtaste als Namenziffer eintragen

key_erd_1	jmp whl_ziff	; Erde wählen



	; Einsprung bei Taster
	; --------------------
key_taster	sta taster_tw	; Tastenwert für Taste loslassen eintragen

	smb TASTER,allg_stat	; Relais zurück wenn Taste losgelassen
	pha		; TW retten
	lda tast_tab+1,x	; Tastennr. laden == Relaisnr.
	sta taster_ind	; Tastennr. merken
	tax		; für "set_twnrled"
	jsr port_on	; Port im Accu setzen
	pla
	ldy #LD_L|LD_ON	; LED-Wert laden
	jmp set_twnrled	; LED einschalten



	; ==============================================
	; Routine wird von Hauptprg. Schleife aufgerufen
	; testen ob Taster noch gedrückt ist
	; ==============================================
taster_los	bbr TASTER,allg_stat,taster_end	; Taste war nicht gedrückt

	lda taster_tw	; Tastenwert laden
	cmp tw		; Taster oder Erdtaste noch gedrückt ?
	beq taster_end	; ja, Ende

	rmb TASTER,allg_stat	; Relais zurückgesetzt eintragen
	ldy #LD_L|LD_OFF	; LED-Wert laden
	ldx taster_ind	; Tastennr. holen

	jsr set_twnrled	; LED ausschalten

	txa		; Tastennr. laden == Relaisnr.
	jmp port_off	; Port löschen

taster_end	rts


; =========================================================================
;
; Funktion	: Port über Schalter ein/aus
;
; Eingang	: bei Schalter
;	: Offset auf Tastaturtabelle in X-Reg.
;	: Tastenwert im Accu
;
; Ausgang	: frei programmierbares Relais ein/ausgeschaltet
;
; Register	: Accu, X
;
; (c) by Thomas Lehmann Mai 1990
;
; =========================================================================

key_schalt	pha		; TW retten
	lda tast_tab+1,x	; Tastennr. laden == Relaisnr.
	tax		; Tastennr. für "set_twnrled"

	jsr port_tst	; ist Port gesetzt ?
	bcs schalt_off	; ja, Relais ausschalten


	; Port einschalten
	; ----------------
	jsr port_on	; Port setzen

	ldy #LD_L|LD_ON	; LED-Wert laden
	bra schalt_led	; LED einschalten


	; Port ausschalten
	; ----------------
schalt_off	jsr port_off	; Port löschen

	ldy #LD_L|LD_OFF	; LED-Wert laden
schalt_led	pla		; Tastenwert zurück
	jmp set_twnrled	; LED ausschalten






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

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

