;**************************************************************************
;
; Filename : TAST_AUSW.ASM
; ------------------------
;
; (c) 1991 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; Programmverteiler für Tasten in der X/Y-Matrix
;
;
;**************************************************************************

MODUL_START	set	*	; Größe des Moduls berechnen



; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: Modus für automatische Tastenberechtigung einschalten
;
; Ausgang	: Wähltasten auf Tastenwert Eingabe umgeleitet
;	: Tasten in X/Y-Matrix umgeleitet
;
; Register	: Accu, X
;
; (c) by Thomas Lehmann Januar 1991
;
; =========================================================================

set_keyber	lda #WTA_KEY_BER		; Prg. bei Wähltaste
	sta wta_prg
	rmb MOD_NO_KEY,modus	; Tastendrücke auswerten

	; 1. zu Berechtigende Taste einstellen
	; ------------------------------------
	stz akt_txt	; Tastenwert der 1. Taste
	stz anz_txt	; aktuelle Tastennr.

	bra keyber_1	; 1. Tastentext ausgeben



	; =======================
	; Einsprung bei Wähltaste
	; =======================

wta_keyber1	jmp bta		; wieder BTA Hauptmenu zeigen

wta_keyber	cmp #BTA_END	; BTA verlassen ?
	beq wta_keyber1	; nein

	cmp #10		; `0` == nächste Tastennr. zeigen ?
	beq keyber_1

	cmp #BTA_NXT_MEN	; nächste Taste zeigen ?
	bne wta_key_end	; nein, ungültige Taste

	lda #$ff	; nächste Taste wenn
	sta anz_txt	; ungültige Tastennr.
	bra keyber_1

wta_key_end	rts


	; ==============================
	; Einsprung bei gedrückter Taste
	; Taste automatisch berechtigen
	; ==============================
keyber	lda key_val+1	; Tastennr. der auto Ber. Taste
	sta tast_tab+1,x	; Tastennr. eintragen
	lda key_val	; Tastenfunktion der auto Ber. Taste
	sta tast_tab,x	; Tastenfkt. eintragen

	bne keyber_1	; Tastenwert != "Taste sperren", nächste Taste
	dec akt_txt	; "Taste sperren" weiter berechtigen





	; =======================================
	; nächste zu programmierende Taste zeigen
	; =======================================
keyber_1	ldx akt_txt	; Tastenwert == Textnr. laden
	stx key_val	; Tastenwert der aktuellen Taste einstellen

	cpx #ANZ_TAST	; bereits alle Tasten angezeigt ?
	bcs set_keyber	; ja, erneute Ausgabe von vorne

	jsr get_keyber	; Textadr. der Tastenfunkt. in X-Reg. ermitteln


	; Tastennr. einstellen
	; --------------------
keyber_2	lda anz_txt	; akt. Tastennr. laden
	cmp (ind_adr)	; Tastennr. "bis" laden
	bcc keyber_3	; Tastennr. ist gültig

	stz anz_txt	; aktuelle Tastennr. == NULL
	inc akt_txt	; nächste Taste einstellen
	bra keyber_1	; Berechtigungstext ermitteln


keyber_3	inc anz_txt	; nächste Tastennr. einstellen

	; Berechtigungstext ausgeben
	; --------------------------
keyber_4	sta key_val+1	; Tastennr. einstellen

	; Tastenwert, Nr. und Text ausgeben
	; ---------------------------------
	lda key_val	; Tastenwert laden
	ldx key_val+1	; Tastennr laden
	jsr dp_clr
	jmp put_keyber




; =========================================================================
;
; Funktion	: Tastenfunktion, Nr. und Berechtigungstext ausgeben
;
; Eingang	: Tastenfunktion im Accu
;	  Tastennr. in X-Reg.
;
; Ausgang	: ---------
;
; Register	: Accu
;
; (c) by Thomas Lehmann Mai 1991
;
; =========================================================================

put_keyber	?inc16	ind_adr	; Ptr. auf Tastentext
	jsr putdez99	; Tastenfunktion ausgeben
	txa
	jsr putdez99	; Tastennr. ausgeben
	jsr space	; SPACE ausgeben
	jmp puts	; Tastentext in "ind_adr" ausgeben


; =========================================================================
;
; Funktion	: Adr. des Berechtigungseintrags für Tastenfunktion holen
;
; Eingang	: Tastenfunktion in X-Reg.
;
; Ausgang	: Adr. der Berechtigung in (ind_adr)
;
; Register	: X
;
; (c) by Thomas Lehmann Mai 1991
;
; =========================================================================

get_keyber	phx		; Tastenfunktion retten
	ldx #<keyber_tab	; 1. zu Berechtigende Taste einstellen
	stx ind_adr
	ldx #>keyber_tab
	stx ind_adr+1

	; Berechtigungsadresse für Tastenfunktion ermitteln
	; -------------------------------------------------
	plx		; Tastenfunktion zurück
keyber_lp	beq keyber_end	; Funktion gefunden, Ende

	?inc16	ind_adr	; Ptr. auf 1. Textzeichen
	jsr strlen	; Textende ermitteln, Update "ind_adr"
	dex		; nächsten Text einstellen
	bra keyber_lp

keyber_end	rts



; Tastenberechtigung, TW bis, Text
; --------------------------------

keyber_tab	?key	01,"keine Funktion"
	?key	01,"Leitung"
	?key	01,"Trennen"
	?key	01,"Halten"
	?key	01,"Wahlwiederholung"
	?key	01,"Merker"
	?key	01,"Freispr./Lauthoer"
	?key	01,"Summerabschaltung"
	?key	01,"Anrufbeantworter"
	?key	01,"Zweitapparat"
	?key	01,"Modem"
	?key	PRG_PORT,"Erde"
	?key	01,"Kontrolle"
	?key	01,"Speicher"
	?key	01,"2. Speicher"
	?key	01,"Ende"
	?key	01,"loeschen/quittier"
	?key	01,"Uhr stellen"
	?key	01,"Telefonbuch"
	?key	MAX_NAM_TAST,"Namentaste"
	?key	01,"Babyruf"
	?key	PRG_PORT,"Taster"
	?key	PRG_PORT,"Schalter"
	?key	01,"Statistik"
	?key	01,"BTA"
	?key	01,"Version"
	?key	01,"Reset"
	?key	01,"Terminal"



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

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

