;**************************************************************************
;
; Filename : NAMTAST.ASM
; ----------------------
;
; (c) 1990 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; Namentasten Handling
;
;
;**************************************************************************


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Namentaste
;	: Offset auf Tastaturtabelle in X-Reg.
;	: Tastenwert im Accu
;
; Ausgang	: LED in Namentaste eingeschaltet
;	: Adr. auf Namenspeicher der Taste in "nam_sp"
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

key_namen	jsr getnam_adr	; Adr. der Namentaste eintragen

	bbs MOD_SP,modus,keynam_sp	; Rufnr. auf Namentaste speichern


	; Rufnr. auf Namentaste ausgeben
	; ------------------------------
	jsr dp_clr	; Display löschen

	ldy #00
nam_ko_lp	lda (nam_sp),y	; Ziffer laden

	bbs ST_2SP,feap_stat,key_nam_2sp	; 2.SP ist aktiv

	; Rufnummer für 1.Speicher ermitteln
	; ----------------------------------
	and #%00001111	; oberes Nibble ausblenden, für 2.Speicher
	bra key_nam_1	; und Ziffernwert ausgeben

	; Rufnummer für 2.Speicher ermitteln
	; ----------------------------------
key_nam_2sp	lsr		; oberes Nibble ins untere schieben
	lsr		; Rufnr. des 2.Speichers steht im high Nibble
	lsr
	lsr

key_nam_1	beq nam_end	; alle Ziffern ausgegeben

	bbs MOD_KO,modus,keynam_ko	; Kontrolle einer Namentaste

	; Rufnr. auf Namentaste wählen
	; ----------------------------
	jsr whl_ziff	; Ziffer wählen
	iny		; nächste Ziffer einstellen
	bne nam_ko_lp


	; Rufnr. auf Namentaste kontrollieren
	; -----------------------------------
keynam_ko	jsr wta_displ	; Ziffer ins Display schreiben
	iny		; nächste Ziffer einstellen
	bne nam_ko_lp

nam_end	cpy #00		; waren Ziffern gespeichert ?
	bne nam_end_1	; ja, Taste war belegt

	ldx #TXT_NAMNBEL	; nicht belegt Textnr. laden
	jmp puttxt	; und Text ausgeben

nam_end_1	rts

nbel_txt	.shift "nicht belegt"


	; Rufnr. auf Namentaste speichern
	; -------------------------------
keynam_sp	lda wta_prg	; Wähltastenprg. laden
	cmp #WTA_SPNAM	; ist Namentasten speichern ausgewählt worden ?
	bne nam_end	; nein, Ende

	lda tast_offs	; wurde vorher schon eine Taste gedrückt ?
	cmp #$ff
	beq nam_sp_1	; nein, keine LED ausschalten

	phx		; Offset auf akt. Taste retten
	tax		; Offs. auf Tastenberechtigung kopieren
	lda #LD_L|LD_R|LD_OFF	; LED-Wert laden
	jsr set_led	; und beide LED`s ausschalten
	plx		; Offset auf akt. Taste zurück

nam_sp_1	bbs ST_2SP,feap_stat,nam_2sp	; 2.Speicher aktiv

	lda #LD_L|LD_T	; LED-Wert für 1.Speicher laden
	bra nam_led	; LED einschalten

nam_2sp	lda #LD_R|LD_T	; LED-Wert für 2.Speicher laden
nam_led	jsr set_led	; und LED einschalten

	stx tast_offs	; Offs. auf letzte Taste merken
	stz nam_ziff	; 1.Ziffer einstellen
	ldx #TXT_RUFNR	; Rufnr. Text ausgeben
	jmp puttxt


rufnr_txt	.shift "Rufnummer ?"


; =========================================================================
;
; Type	: Unterprg.
;
; Eingang	: Tastennr. im Accu
;
; Ausgang	: Adr. auf Namenspeicher der Taste in "nam_sp"
;
; Register	: ------
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

getnam_adr	pha		; Register retten
	phx
	phy

	lda tast_tab+1,x	; Tastennr. laden

	ldx #<nam_buff1	; Startadr. des 1.Namenspeicher laden
	ldy #>nam_buff1

	cmp #MAX_NAM1	; Speicherbereich im 1.RAM ?
	bcc getnam_adr1	; ja, 2.Speicherbereich nicht setzen

	ldx #<nam_buff2	; Startadr. des 2.Namenspeicher laden
	ldy #>nam_buff2
	sec
	sbc #MAX_NAM_ZIFF	; Offset auf 2.RAM einstellen

getnam_adr1	stx nam_sp	; Startadr. des Namenspeicher eintragen
	sty nam_sp+1

	tax		; Tastennr. kopieren
	beq gnam_adr_ok	; es ist 1.Taste im RAM

	inx
	lda nam_sp	; low Byte der Startadr. laden
gnam_adr_lp	clc
	adc #MAX_NAM_ZIFF	; Anzahl der Ziffern/Namentaste dazu
	bcc getnam_adr3	; kein Überlauf

	inc nam_sp+1	; high Byte+1
getnam_adr3	dex		; Taste gefunden ?
	bne gnam_adr_lp	; nein, neuer Durchlauf

	sta nam_sp	; low Byte ablegen

gnam_adr_ok	ply		; Register zurück
	plx
	pla
	rts


; =========================================================================
;
; Type	: Hauptprg.
;	: Rufnummer auf einer Namentaste speichern/kontrollieren
;
; Eingang	: Auswahl bei Speichern/Kontrolle
;
; Ausgang	: Wähltastatur bei Speichern umgeleitet und keine Namentaste
;	: gedrückt in "tast_offs" eingestellt
;
;	: Wähltastatur bei Kontrolle abgeschaltet
;	: "Namentaste" Text im Display
;
; Register	: X
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

spko_namkey	bbs MOD_KO,modus,spko_nam_1	; Kontolle einer Namentaste

	ldx #$ff
	stx tast_offs	; noch keine Namentaste gedrückt einstellen

	ldx #WTA_SPNAM	; Namentasten Prg. Nr. laden
	bra spko_nam_2	; und Parameter einstellen

spko_nam_1	ldx #WTA_NOPRG	; kein WTA-Programm ausführen
spko_nam_2	stx wta_prg	; und bei Wähltaste ausführen

	ldx #TXT_NAME	; Textnr. laden
	jmp puttxt	; und Text ausgeben


namtast_txt	.shift "Namentaste ?"


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Wähltaste und eingeschaltetem Namentasten-Speicher-Modus
;	: Tastenwert (1 bis ...) im Accu
;
; Ausgang	: eingegebene Rufnummer auf der Namentaste gespeichert
;
; Register	: Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

wta_spnam	ldy tast_offs	; Offset auf Taste laden
	cpy #$ff	; ist schon eine Namentaste gedrückt worden ?
	beq wta_spnam_e	; nein, Ende

	ldy nam_ziff	; akt. Ziffer laden
	bne wta_spnam_1	; nicht die erste Ziffer, Display ist clr

	jsr dp_clr	; Display löschen

wta_spnam_1	cpy #MAX_NAM_ZIFF-1	; max. Anzahl Ziffern eingegeben ?
	bcs wta_spnam_e	; ja, nicht eintragen

	pha		; Ziffer für Ausgabe retten
	pha		; Ziffer für speichern retten
	bbs ST_2SP,feap_stat,wta_spnam_2	; 2.SP ist aktiv

	; Rufnummer für 1.Speicher ermitteln
	; ----------------------------------
	lda (nam_sp),y	; Ziffer für 1. und 2. Speicher laden
	and #%11110000	; unteres Nibble ausblenden
	sta (nam_sp),y
	pla		; Ziffer zurück
	bra wta_spnam_3	; und Ziffernwert eintragen

	; Rufnummer für 2.Speicher ermitteln
	; ----------------------------------
wta_spnam_2	lda (nam_sp),y	; Ziffer für 1. und 2. Speicher laden
	and #%00001111	; oberes Nibble ausblenden
	sta (nam_sp),y
	pla		; Ziffer zurück
	asl		; unteres Nibble ins obere schieben
	asl		; Rufnr. des 2.Speichers steht im high Nibble
	asl
	asl

wta_spnam_3	ora (nam_sp),y	; Ziffer dazu
	sta (nam_sp),y	; und Ziffer speichern
	inc nam_ziff	; nächste Ziffer einstellen
	iny

	lda (nam_sp),y	; Ende-Ziffer für 1. und 2. Speicher laden
	bbs ST_2SP,feap_stat,wta_spnam_4	; 2.SP ist aktiv

	and #%11110000	; unteres Nibble ausblenden, letzte Ziffer 1.SP
	bra wta_spnam_5	; und Endekennzeichnung speichern

wta_spnam_4	and #%00001111	; oberes Nibble ausblenden, letzte Ziffer 2.SP

wta_spnam_5	sta (nam_sp),y	; letzte Ziffer kennzeichnen
	pla		; Ziffer zurück
	jsr wta_displ	; Ziffer im Display anzeigen
wta_spnam_e	rts	
