;**************************************************************************
;
; Filename : LEITUNG.ASM
; ----------------------
;
; (c) 1990 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; Leitungs Funktionen
;
;
;**************************************************************************


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Leitungstaste
;	: Offset auf Tastaturtabelle in X-Reg.
;	: Tastenwert in "tw"
;
; Ausgang	: Leitung belegt
;
; Register	: Accu
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

key_ltg	bbs LTG_HLT,ltg_stat,key_ltgbel	; Leitung neu belegen

	bbs LTG_BEL,ltg_stat,set_gspr	; nur Gesprächsdauer auf Null setzen

key_ltgbel	smb LTG_MARK,ltg_stat	; Leitungsbelegung markieren
	phy		; Register retten
	ldy #LD_L|LD_R|LD_ON	; LED Status laden
	lda #KEY_LTG	; Tastenwert für Leitung laden
	jsr set_prgled	; und beide LED`s einschalten
	jsr key_ende	; Ende Speichern/Kontrolle ...
	ply		; Register zurück
	lda #WHLCU_DISPL	; Wahlablauf-Cursorprg. Nr. laden
	sta displ_prg	; und bei Displayausgabe ausführen

set_gspr	stz gesprd	; Gesprächsdauer auf NULL setzen
	rts


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: wird von hauptprg.-Schleife aufgerufen
;
; Ausgang	: Leitung belegt wenn Anforderung bestand und der
;	: Wiederbelegungstimer abgelaufen ist
;
; Register	: Accu
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

ltg_bel	bbr LTG_MARK,ltg_stat,ltg_bel_end	; keine Anforderung, Ende

	lda struct_tim+BEL_TIM_O	; ist Wiederbelg. Timer abgelaufen ?
	bne ltg_bel_end	; nein, Leitung noch nicht belegen

	rmb LTG_MARK,ltg_stat	; Makierung löschen
	smb LTG_BEL,ltg_stat	; Leitung belegt eintragen
	rmb LTG_HLT,ltg_stat	; Ltg. nicht mehr in Halten
	rmb ST_SU,su_stat		; Summer ausschalten

	; Leitungs-Relais schalten
	; ------------------------
	jsr nsa_off	; NSA-Relais abschalten
	jsr nsi_on	; NSI-Relais einschalten
	jsr ha_off	; Leitung aus Halten holen
	jsr ab_on	; a/b durchschalten
	jsr beantw_off	; Anrufbeantworter abschalten
	jsr post_off	; Postapp. abschalten
	jsr mod_off	; Modem abschalten
ltg_bel_end	rts


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Trennentaste
;	: Offset auf Tastaturtabelle in X-Reg.
;	: Tastenwert in "tw"
;
; Ausgang	: 
;
; Register	: 
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

key_trenn	bbs LTG_MARK,ltg_stat,key_tr_1	; Ltg. ist makiert, nicht bel.
	bbr LTG_BEL,ltg_stat,key_tr_end	; es war keine Ltg. belegt

	; Ltg.-Relais in Ruhezustand bringen
	; ----------------------------------
 	jsr nsi_off	; NSI-Relais abschalten
	jsr nsa_off	; NSA-Relais abschalten
	jsr mod_off	; Modem abschalten
	jsr ab_off	; a/b abschalten
	jsr ha_off	; Halten Relais abschalten

	; Wiederbelegungs Timer aufziehen
	; -------------------------------
key_tr_1	lda #BEL_TIM	; Timerwert für Wiederbelegung laden
	sta struct_tim+BEL_TIM_O	; und Timer starten

	; sonstige Funktionen in Ruhezustand bringen
	; ------------------------------------------
	stz ltg_stat	; Leitung nicht belegt eintragen
	stz wahl_bu_po	; Pointer auf 1.Zeichen im Wahlbuffer setzen
	stz wahl_po	; keine Ziffer gewählt eintragen

	ldy #LD_L|LD_R|LD_OFF	; LED Status laden
	lda #KEY_LTG	; Tastenwert für Leitung laden
	jsr set_prgled	; und beide LED`s ausschalten
	jsr zwsp_off	; 2.Speicher ausschalten
	jsr fslh_off	; Freisprechen ausschalten

	lda modus	; Speichern, Kontr, ... aktiv ?
	bne key_tr_end	; ja, Ende Taste nicht ausführen

	jsr key_ende	; Uhr anzeigen, Wta-Prg. normal ...

key_tr_end	rts

; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Haltentaste
;	: Offset auf Tastaturtabelle in X-Reg.
;	: Tastenwert in "tw"
;
; Ausgang	: Leitung in Halten gelegt
;	: LED`s eingeschaltet
;
; Register	: Accu, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

key_halten	bbs LTG_BEL,ltg_stat,key_hlt_1	; Halten Status setzen

	rts		; keine Ltg. belegt, Ende

key_hlt_1	smb LTG_HLT,ltg_stat	; Leitung in Halten eintragen

	jsr ha_on	; Halten-Relais einschalten
	jsr ab_off	; a/b abschalten
	jsr nsa_off	; NSA-Relais abschalten

	ldy #LD_L|LD_S	; LED Status laden
	lda #KEY_LTG	; Tastenwert für Leitung laden
	jmp set_prgled	; und LED schalten


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei WW-Taste
;	: Offset auf Tastaturtabelle in X-Reg.
;	: Tastenwert in "tw"
;
; Ausgang	: die Ltg. wird getrennt, und die letzte gewählte Rufnr. wird
;	: erneut gewählt
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

key_ww	bbs LTG_BEL,ltg_stat,key_ww_1	; Ltg. ist belegt

	bbr LTG_MARK,ltg_stat,ww_get_ziff	; Ltg. ist getrennt
	smb LTG_BEL,ltg_stat	; Trennen Prg. ausführen

key_ww_1	jsr key_trenn	; Leitung trennen

ww_get_ziff	ldx #00
ww_loop	lda wahl_buff+1,x	; 2. Ziffer aus Wahlbuffer holen
	tay		; und Ziffer retten
	lda wahl_buff,x	; Ziffer aus Wahlbuffer holen
	beq ww_end	; alle Ziffern kopiert

	jsr whl_ziff	; Wahlziffer eintragen
	inx		; nächste Ziffer einstellen
	tya
	sta  wahl_buff,x	; Endekennz. durch vorherige Ziffer ersetzen
	bra ww_loop	; und kopieren

ww_end	rts


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Merkertaste
;	: Offset auf Tastaturtabelle in X-Reg.
;	: Tastenwert in "tw"
;
; Ausgang	: wenn Ltg. belegt wird die gewählte Rufnr. im Merker-Buffer
;	: gespeichert.
;	: andernfalls wird die gemerkte Rufnr. gewählt
;
; Register	: Accu, X
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

key_merker	bbs LTG_BEL,ltg_stat,merk_sp	; Ltg. belegt, Rufnummer speichern

	; Ziffern aus Merker-Buffer wählen
	; --------------------------------
	ldx #$00
merk_loop	lda merk_buff,x	; Ziffer aus Merker-Buffer holen
	beq merk_end	; alle Ziffern ausgegeben

	jsr whl_ziff	; Wahlziffer eintragen
	inx		; nächste Ziffer eintellen
	bne merk_loop	; und neuer Durchlauf

	rts

	; gewählte Ziffern im Merker-Buffer speichern
	; -------------------------------------------
merk_sp	ldx #$00	; Rufnummer holen
merk_sp_lp	cpx wahl_bu_po	; alle Ziffern kopiert ?
	bcs merk_end	; ja, Ende

	lda wahl_buff,x	; Ziffer laden
	sta merk_buff,x	; und im Merker Buffer ablegen
	inx
	bne merk_sp_lp	; nächste Ziffer holen

merk_end	rts


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Modemtaste
;	: Offset auf Tastaturtabelle in X-Reg.
;	: Tastenwert in "tw"
;
; Ausgang	: 
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

key_modem	bbs LTG_BEL,ltg_stat,key_mod_1	; Ltg. ist belegt

	rts		; Ltg. ist nicht belegt, Ende

key_mod_1	bbs ST_MODEM,feap_stat,key_mod_off	; Modem abschalten

	smb ST_MODEM,feap_stat	; Status eintragen
	jmp mod_on	; Modem anschalten

key_mod_off	rmb ST_MODEM,feap_stat	; Status austragen
	jmp mod_off	; Modem abschalten


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Anrufbeantwortertaste
;	: Offset auf Tastaturtabelle in X-Reg.
;	: Tastenwert in "tw"
;
; Ausgang	: Anrufbeantworter ein/ausschalten
;
; Register	: Accu
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

key_beantw	bbs ST_BEANTW,feap_stat,key_bea_off	; Beantworter abschalten

	smb ST_BEANTW,feap_stat	; Status eintragen
	bbs LTG_BEL,ltg_stat,key_bea_ltg	; Ltg. ist belegt

	jmp beantw_on	; Beantworter anschalten

key_bea_ltg	lda #LD_L|LD_N	; LED Status laden
	jmp set_led

key_bea_off	rmb ST_BEANTW,feap_stat	; Status austragen
	jmp beantw_off	; Beantworter abschalten


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Postapparattaste
;	: Offset auf Tastaturtabelle in X-Reg.
;	: Tastenwert in "tw"
;
; Ausgang	: 
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

key_post	bbr ST_POST,feap_stat,key_po_off	; Postapparat abschalten

	rmb ST_POST,feap_stat	; Status eintragen
	bbs LTG_BEL,ltg_stat,key_po_ltg	; Ltg. ist belegt

	jmp post_on	; Postapp. anschalten

key_po_ltg	lda #LD_L|LD_N	; LED Status laden
	jmp set_led

key_po_off	smb ST_POST,feap_stat	; Status eintragen
	jmp post_off	; Postapp. abschalten


