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

MODUL_START	set	*	; Größe des Moduls berechnen


; =========================================================================
;
; Funktion	: BTA-Wahl-Modus einschalten
;	  nachdem das Passwort korrekt eingegeben wurde oder Direktwahl
;	  Wähltasten auf BTA-Wahl umleiten
;
; Eingang	: ----------
;
; Ausgang	: ----------
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann Januar 1991
;
; =========================================================================

btawhl_txt	byte	DSP_CLR
	shift	"BTA   *=vor #=Ende   -->"

	byte	DSP_CLR
	shift	"1=Tastenber. 2=Text  -->"

	byte	DSP_CLR
	shift	"3=Ber.loesch 4=Setup -->"


bta_tab	word set_keyber	; Tastenberechtigung automatisch
	word bta_ascii	; Tasten-Textberechtigung einschalten
	word clr_tastber	; Tastenberechtigung löschen
	word setup	; Setup Funktionen

TAB_LEN	set	*-bta_tab	; Tabellenlänge



bta	smb MOD_BTA,modus	; BTA Modus ist aktiviert
	lda #$00	; Füllwert
	jsr fill_ledram	; alle LED`s ausschalten
	smb MOD_NO_KEY,modus	; Tastendrücke nicht auswerten
	smb MOD_KEYSPEC,modus	; Tasten haben Spezialfunktion
	rmb MOD_TXT,modus	; Tastentext nicht berechtigen

	; Funktionstabelle für Wähltasten
	; -------------------------------
	lda #TAB_LEN	; Tabellenlänge laden
	ldx #<bta_tab	; Adresse der Tabelle
	ldy #>bta_tab
	jsr set_wta_fkt	; Funktionstabelle für Wähltasten installieren
	lda #WTA_BTA_WHL	; BTA-Prg. Nr. für BTA-Wahl laden
	sta wta_prg	; und bei Wähltaste ausführen

	ldx #<btawhl_txt	; 1. BTA Text laden
	ldy #>btawhl_txt
	lda #ANZ_BTATXT	; Anzahl der Texte laden
	jmp init_dsptxt	; Textwahl initialisieren


; =========================================================================
;
; Funktion	: BTA-Modus auswählen
;	  angewählte BTA-Funktion eingeleitet
;
; Eingang	: bei Wähltaste und eingeschaltetem BTA-Wahl-Modus
;	: Tastenwert (1 bis ...) im Accu
;
; Ausgang	: ------------
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

wta_bta_whl	cmp #BTA_END	; BTA verlassen ?
	beq bta_off	; ja, BTA-Modus aus

	cmp #BTA_NXT_MEN	; nächstes Menue anzeigen ?
	bne wta_bta_1	; nein, Auswahl eines Menuepunkts

	; nächstes BTA-Menue im Display anzeigen
	; --------------------------------------
	jmp nxt_dsptxt	; nächsten Text ausgeben

wta_bta_1	jmp wta_funkt	; Funktion der Wähltaste ausführen



	; =============
	; BTA verlassen
	; =============
bta_off	jmp ledoff_ende	; LED`s ausschalten, Key Ende ausführen



; =========================================================================
;
; Funktion	: Tastentext-Berechtigung
;	  der ASCII-Wert muß immer 2-stellig eingegeben werden
;	  Eingaben von Werten > 99 sind deshalb nicht möglich
;
; Eingang	: -------
;
; Ausgang	: -------
;
; Register	: Accu
;
; (c) by Thomas Lehmann Januar 1991
;
; =========================================================================

bta_ascii	lda #WTA_ASCII	; BTA-Prg. Nr. für Text berechtigen laden
	sta wta_prg	; und bei Wähltaste ausführen
	rmb MOD_NO_KEY,modus	; Tastendrücke auswerten

	smb MOD_TXT,modus	; Text berechtigen eintragen

	lda #$ff	; erstes Textzeichen einstellen
	bra ta_txt_out	; Textzeichen ausgeben



HLP	set	*

bta_asc_txt	byte 01|DSP_CLR|CURS_SET|CURS_ON
	shift	"ASCII-Wert: \""

HLP	set	*-HLP
INPUT_CURS	set	HLP+4	; Position des Eingabe Cursors


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

wta_ascii_e	rts

wta_ascii	cmp #BTA_END	; BTA verlassen ?
	bne wta_ascii_1

	jmp bta		; wieder BTA Haupt-Menue anzeigen

wta_ascii_1	cmp #BTA_NXT_MEN	; nächsten ASCII-Wert automatisch einstellen ?
	bne wta_ascii_2

	inc akt_txtchar	; nächstes Textzeichen einstellen(NXT_BTA)
	lda akt_txtchar
	bra ta_txt_out	; Textzeichen ausgeben


wta_ascii_2	jsr check_wta	; Taste im Gültigkeitsbereich ?
	bcs wta_ascii_e	; nein, Ende

	jsr input	; ASCII-Wert eintragen
	ldx input_po	; Offset auf akt. Eingabe
	cpx #2		; ASCII-Wert komplett eingegeben ?
	bcc wta_ascii_e	; nein

	ldx #00		; 2-stellige Eingabe holen
	jsr get_input	; Textwert holen (Wert im ACCU)

	sta akt_txtchar	; aktuelles Textzeichen eintragen


	; Textzeichen ausgeben
	; --------------------
ta_txt_out	stz input_po	; Offset auf akt. Eingabe
	ldx #<bta_asc_txt	; Text ausgeben
	ldy #>bta_asc_txt
	jsr puttxt

	cmp #$00	; ASCII-Text löschen ?
	beq tast_txt_2	; ja, Textwert belassen, Meldung ins Display

	cmp #128	; alle Textzeichen ausgegeben ?
	bcc tast_txt_1	; nein

	lda #SPACE	; erstes Textzeichen laden
	sta akt_txtchar	; und für Textber. einstellen

tast_txt_1	pha		; Zeichen Wert merken
	jsr putchar	; Textzeichen der Taste ausgeben
	lda #"\""	; Anführungszeichen laden
	jsr putchar	; und ausgeben
	jsr space	; Space hinterher, Cursor ist eingeschaltet
	pla		; Zeichen zurück
	jsr putdez	; und 3-stellig ausgeben
	lda #INPUT_CURS	; Cursorposition holen
	jmp curs_set	; Cursor auf Eingabe setzten


tast_txt_2	ldx #<clr_txt	; Text ausgeben
	ldy #>clr_txt
	jmp puttxt


clr_txt	byte DSP_CLR
	shift	"Text loeschen, Taste ?"




	; =======================================
	; Einsprung bei gedrückter Taste
	; Textzeichen in Tastentextber. eintragen
	; =======================================
key_ascii	ldy akt_txtchar	; aktuelles Textzeichen laden
	beq key_asc_1	; Text auf Taste löschen

	cmp #KEY_ENDE	; ist es "Ende" Taste
	beq wta_ascii_e	; fatal, kein Text auf Ende Taste (Terminer)

key_asc_1	txa		; Offset auf Tastenber. kopieren
	lsr a		; Offset auf Textber. erzeugen
	tax

	tya		; aktuelles Textzeichen laden
	sta tast_txt,x	; ASCII-Zeichen für Taste in Ber. eintragen
	beq ta_txt_out	; Tastentext wurde gelöscht

	inc akt_txtchar	; nächstes Textzeichen einstellen
	inc a		; und nächstes Textzeichen ausgeben
	bra ta_txt_out	; Textzeichen ausgeben



; =========================================================================
;
; Type	: Unterprg.
;
; Eingang	: -------
;
; Ausgang	: komplette Tastenberechtigung initialisiert
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann Mai 1990
;
; =========================================================================

clr_tastber	lda #WTA_BER_CLR	; BTA-Prg. Nr. für Tastenber. clr laden
	sta wta_prg	; und bei Wähltaste ausführen

	ldx #<berclr_txt	; Text ausgeben
	ldy #>berclr_txt
	jmp puttxt

berclr_txt	byte DSP_CLR
	shift	"!! Ber. loeschen ?? 1=ja"


; =========================================================================

;
; Type	: Hauptprg.
;	: Sicherheits-Abfrage ob Tastenber wirklich gelöscht werden soll
;
; Eingang	: bei Wähltaste und eingeschaltetem BTA-Modus->Tastenber. clr
;	: Tastenwert im Accu
;
; Ausgang	: wenn ja, TW 1, komplette Tastenberechtigung gelöscht
;
; Register	: Accu, X
;
; (c) by Thomas Lehmann Mai 1990
;
; =========================================================================

wta_berclr	cmp #1		; wurde Frage mit ja beantwortet ?
	bne wta_bercl_1	; nein, Ber. nicht clr

	ldx #<tast_tab	; low Byte der Tastenber. laden
	stx ind_adr	; und setzen
	ldx #>tast_tab	; dito high Byte
	stx ind_adr+1	; und setzen
	ldx #<KEYBER_INIT	; low Byte Tastenber. Ende
	ldy #>KEYBER_INIT	; dito high
	lda #00		; Füllwert laden
	jsr fill_ram	; RAM füllen
	jsr fill_ledram	; alle LED`s ausschalten (ACCU=Füllwert)

wta_bercl_1	jmp bta		; wieder 1.BTA Menue anzeigen





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

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

