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


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: Passwort wurde korrekt eingegeben, BTA-Wahl-Modus einschalten
;
; Ausgang	: Wähltasten auf BTA-Wahl umgeleitet
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

bta_mod_whl	lda #WTA_BTA_WHL	; BTA-Prg. Nr. für BTA-Wahl laden
	sta wta_prg	; und bei Wähltaste ausführen

	ldx #TXT_BTAWHL	; Textnr. laden
	jmp puttxt	; Text ins Display


btawhl_txt	.shift	"1=Tastenber. 2=Text-Ber."


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

bta_tab	.rta bta_mod_ta	; Tastenberechtigung einschalten
	.rta bta_mod_txt	; Tasten-Textberechtigung einschalten

TAB_LEN	.set	*-bta_tab	; Tabellenlänge


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

	smb MOD_BTA,modus	; BTA-Modus ist eingeschaltet
	dec a		; Tastenwert 0-... erzeugen
	asl		; mal 2 = Offset auf Programmtabelle
	tax
	cpx #TAB_LEN	; ist Auswahl gültig ?
	bcs bta_whl_end	; nein, Ende

	lda bta_tab+1,x	; high Byte laden
	pha		; und auf den Stack
	lda bta_tab,x	; low Byte laden
	pha
bta_whl_end	rts		; Programm ausführen


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

bta_mod_ta	lda #WTA_BTA	; BTA-Prg. Nr. für Tasten berechtigen laden
	sta wta_prg	; und bei Wähltaste ausführen
	ldx #$ff
	stx tast_offs	; Offset auf Tastaturtabelle

bta_nxt_ta	ldx #$ff
	stx input_po	; noch keine Taste für BTA-Ber. gedrückt
	ldx #TXT_BTATAST	; Textnr. laden
	jmp puttxt	; Text ins Display


btatast_txt	.shift	"Taste ?"


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Wähltaste und eingeschaltetem BTA-Modus->Tastenber.
;	: Tastenwert im Accu
;
; Ausgang	: Tastenwert in Berechtigung eingetragen
;
; Register	: Accu, X
;
; (c) by Thomas Lehmann Feb. 1990
;
; =========================================================================

wta_bta	cmp #BTA_END	; BTA verlassen ?
	beq wta_bta_off	; ja, BTA-Modus aus

	ldx input_po	; Offset auf akt. Eingabe
	cpx #$ff	; wurde schon eine Taste gedrückt ?
	beq wta_bta_end	; nein, Ende

	cpx #4		; läuft "aendern ja/nein" Abfrage ?
	bcs wta_bta_2	; ja

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

	jsr input	; Tastenwert eintragen
	cpx #3		; Tastenwert komplett eingegeben ?
	bcc wta_bta_end	; nein, noch nicht ändern abfragen

	ldx #TXT_AENDJN	; Textnr. laden, "aendern ja/nein"
	jmp puttxt	; Text ins Display

wta_bta_end	rts

	; =================
	; BTA-Modus beenden
	; =================
wta_bta_off	lda #00		; Füllwert laden
	jsr fill_ledram	; alle LED`s ausschalten
	jmp key_ende	; Ende Taste ausführen


	; blinkende LED einschalten
	; -------------------------
bta_led_on	ldx tast_offs	; Offset auf letzte Taste laden
	cpx #$ff	; ist 1.Taste schon gedrückt worden ?
	beq wta_bta_end	; nein, keine LED einschalten

	lda #LD_L|LD_R|LD_ON	; LED-Wert laden
	jmp set_led	; und LED einschalten
	

	; Tastenwert und Nummer in Tastaturtabelle eintragen
	; --------------------------------------------------

wta_bta_2	cmp #2		; Tastenwert ändern (Wtaste "2") ?
	beq wta_bta_3	; nicht ändern, nächste Taste berechtigen
	bcs wta_bta_end	; ungültige Taste

	ldy tast_offs	; Offset auf Tastaturtabelle laden
	ldx #00		; 1. Eingabe holen
	jsr get_input	; Tastenwert holen
	sta tast_tab,y	; Tastenwert speichern

	inx		; 2. Eingabe holen
	jsr get_input	; Tastennr. holen
	sta tast_tab+1,y	; Tastenwert speichern

wta_bta_3	jsr bta_led_on	; blinkende LED einschalten
	bra bta_nxt_ta	; nächste Taste berechtigen


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: BTA-Modus für Tastentext-Berechtigung einschalten
;
; Ausgang	: Wähltasten auf ASCII-Eingabe umgeleitet
;	: Tasten in X/Y-Matrix umgeleitet
;
; Register	: Accu
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

bta_mod_txt	lda #WTA_ASCII	; BTA-Prg. Nr. für Text berechtigen laden
	sta wta_prg	; und bei Wähltaste ausführen
	stz input_po	; Offset auf akt. Eingabe

	smb MOD_TXT,modus	; Text berechtigen eintragen

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


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Wähltaste und eingeschaltetem BTA-Modus->Textber.
;	: Tastenwert im Accu
;
; Ausgang	: Start ASCII-Wert eingestellt
;
; Register	: Accu, X
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

wta_ascii	cmp #BTA_END	; BTA verlassen ?
	beq wta_bta_off	; ja, BTA-Modus aus

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

	ldx input_po	; Offset auf akt. Eingabe
	jsr input	; Tastenwert eintragen
	cpx #1		; Tastenwert komplett eingegeben ?
	bcc wta_asc_end	; nein

	stz input_po	; Offset auf akt. Eingabe
	ldx #00		; 1. Eingabe holen
	jsr get_input	; Textwert holen
	sta akt_txtchar	; aktuelles Textzeichen eintragen
	bra ta_txt_out	; Textzeichen ausgeben

wta_asc_end	rts


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Taste in X/Y-Matrix und eingeschaltetem BTA-Modus
;	: Tastenwert im Accu
;	: Offset auf Tastaturtabelle in X-Reg.
;
; Ausgang	: Tastenwert und Nr. ausgegeben
;
; Register	: Accu
;
; (c) by Thomas Lehmann Feb. 1990
;
; =========================================================================

twert_txt	.shift	"Tastenwert: "

CURS_POS	.set	*-twert_txt


tast_bta	stz input_po	; Pointer auf Inputbuffer
	phx		; Offset auf Tastaturtabelle retten
	pha		; Tastenwert retten
	jsr bta_led_on	; blinkende LED einschalten
	pla
	plx		; Offset zurück
	stx tast_offs	; Offset auf Tastaturtabelle merken
	lda #LD_L|LD_R|LD_T ; LED-Wert laden
	jsr set_led	; und LED schalten

	phx		; und retten
	bbs MOD_TXT,modus,tast_btatxt	; Tastentext berechtigen

	; Tastenwert der Taste ausgeben
	; -----------------------------
	ldx #TXT_TWERT	; Textnr. laden
	jsr puttxt	; Text ins Display

	jsr hextodez	; Tastenwert umrechnen
	jsr putzahl	; und ausgeben

	plx		; Offset zurück
	lda tast_tab+1,x	; Tastennr. laden
	jsr hextodez	; Tastennr. umrechnen
	jsr putzahl	; und ausgeben

	lda #CURS_POS	; Cursorposition laden
	jmp curs_set	; Cursor auf Tastenwert setzen


	; Textzeichen in Tastentextber. eintragen
	; ---------------------------------------
tast_btatxt	plx		; Offset zurück
	txa		; Offset auf Tastenber. kopieren
	lsr a		; Offset auf Textber. erzeugen
	tax

	lda akt_txtchar	; 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
	clc
	adc #1		; und nächstes Textzeichen ausgeben

	; Textzeichen ausgeben
	; --------------------
ta_txt_out	ldx #TXT_BTATXT	; Textnr. laden
	jsr puttxt	; Text ins Display

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

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

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

	jsr putchar	; Textzeichen der Taste ausgeben
	lda #"\""	; Anführungszeichen laden
	jsr putchar	; und ausgeben
	jmp putspace	; Space hinterher, Cursor ist eingeschaltet


tast_txt_2	ldx #TXT_TXTCLR	; Textnr. laden
	jmp puttxt	; Text ins Display


btatxt_txt	.shift	"ASCII-Wert: \""
txtclr_txt	.shift	"Tastentext clr "


