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


; =========================================================================
;
; Type	: Hauptprg.
;	: Termin speichern/kontrollieren
;
; Eingang	: Auswahl bei Speichern/Kontrolle
;
; Ausgang	: Wähltastatur auf Terminauswahl umgeleitet
;	: belegte Termine ausgegeben
;
; Register	: X
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

spko_term	ldx #WTA_TERMWHL	; Terminauswahl Prg. Nr. laden
	stx wta_prg	; und bei Wähltaste ausführen

	ldx #TXT_TERMWHL	; Textnr. laden
	jsr puttxt	; und Text ausgeben

	jmp put_termnr	; Terminnr. und Belegtzustände ausgeben

termwhl_txt	.shift "Termin:"


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Wähltaste und eingeschaltetem Termin-Auswahl-Modus
;	: Tastenwert (1 bis ...) im Accu
;
; Ausgang	: Termin ausgewählt
;	: Terminzeit ausgegeben
;	: Terminnr. in "term_nr" eingetragen
;	: Wähltasten auf Termin-Eingabe umgeleitet wenn speichern aktiv
;	: sonst auf Terminkontrolle
;
; Register	: Accu
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

wta_termwhl	dec a		; Terminnr. 0-7 erzeugen
	cmp #MAX_TERM	; ist Auswahl gültig ?
	bcs wta_twhl_e	; nein, Ende

	sta term_nr	; Terminnr. eintragen
	jsr put_termdat	; Termin Zeit ausgeben

	bbs MOD_SP,modus,wta_twhl_s	; Speichern ist aktiv

	lda #WTA_TERMKO	; Termin-Kontrolle Prg. Nr. laden
	sta wta_prg	; und bei Wähltaste ausführen
	stz term_kodat	; Art der Anzeige setzen
	rts

wta_twhl_s	lda #WTA_TERMEIN	; Termin-Zeit-Eingabe Prg. Nr. laden
	sta wta_prg	; und bei Wähltaste ausführen
	stz input_po	; Offset auf akt. Eingabe
wta_twhl_e	rts


; =========================================================================
;
; Type	: Hauptprg.
;	: ausgewählten Termin freigeben
;
; Eingang	: bei Löschentaste und entsprechendem Wta-Prg.
;
; Ausgang	: Termin als frei gekennzeichnet
;
; Register	: X
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

term_clr	ldx term_nr	; aktuelle Terminnr. laden
	stz term_days,x	; Termin nicht belegt kennzeichnen

	jmp spko_term	; erneute Terminauswahl starten


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Wähltaste und eingeschaltetem Termin-Kontrolle-Modus
;	: Tastenwert (1 bis ...) im Accu
;
; Ausgang	: alle Termindaten im Display angezeigt
;
; Register	: Accu, X
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

termko_tab	.rta put_termdat	; Terminzeit ausgeben
	.rta put_termday	; Termintage mit Belegtkennzeichnung ausgeben
	.rta ttxt_out	; Termintext ausgeben

TAB_LEN	.set	*-termko_tab	; Tabellenlänge


wta_termko	cmp #TERM_KONTR	; ist Taste gültig ?
	bne wta_tko_end	; nein, Ende

	inc term_kodat	; nächste Terminart einstellen

wta_tko_1	lda term_kodat	; Terminart laden
	asl a		; mal 2 = Offset auf Programmtabelle
	tax
	cpx #TAB_LEN	; sind alle Termindaten ausgegeben ?
	bcc wta_tko_2	; nein, akt. Termindaten anzeigen

	stz term_kodat	; erste Terminart einstellen
	bra wta_tko_1	; und Prg. Adresse laden

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


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Wähltaste und eingeschaltetem Terminzeit-Eingabe-Modus
;	: Tastenwert (1 bis ...) im Accu
;
; Ausgang	: Terminzeit eingetragen
;	: Wähltasten auf Termintext-Eingabe umgeleitet
;	: bzw. wenn Dauertage gewählt auf Termintage-Eingabe
;
;	: Format der Terminstruktur: Monat, Tag, Minute, Stunde
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

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

	ldx input_po	; Offset auf akt. Eingabe
	jsr input	; Tastenwert eintragen

	cpx #7		; Eingabe komplett ?
	beq wta_tein_t	; ja, Eingabe in Terminstruktur eintragen

	txa
	bit #1		; ist die 2. Ziffer eingegeben ?
	beq wta_tein_e	; nein, Cursor nicht weiterschalten

	ldx dp_bu_po	; Cursorposition laden
	inx		; nächste Eingabe einstellen
	txa		; Cursorpos. kopieren
	jmp curs_set	; und Cursor setzen


	; Terminzeit eintragen
	; --------------------
wta_tein_t	ldx #$00	; erste Eingabe holen
	ldy #$03	; Terminzeit rückwärts eintragen

wta_tein_lp	jsr get_input	; Zeitwert holen
	sta (ttime_adr),y	; und in Terminstruktur eintragen
	inx		; nächste Eingabe holen
	dey		; Offset auf Terminstruktur
	bpl wta_tein_lp	; noch nicht alle Eingaben geholt

	; Termin belegt eintragen
	; -----------------------
	ldy term_nr	; aktuelle Terminnr. laden
	lda term_days,y	; Termintage laden
	ora #TERM_BEL	; Wert für Termin belegt dazu
	sta term_days,y	; und Termin belegt eintragen

	ldy #1		; Offset auf Termintag laden
	lda (ttime_adr),y	; Termintag laden
	cmp #99		; soll Termin jeden Tag kommen ?
	bne set_t_text	; nein, Termintext eingeben

	; Termintage-Eingabe vorbereiten
	; ------------------------------
	ldx #WTA_TERMDAY	; Termintage Prg. Nr. laden
	stx wta_prg	; und bei Wähltaste ausführen

	jmp put_termday	; Termintage mit Belegtkennzeichnung ausgeben


	; Termintext-Eingabe vorbereiten
	; ------------------------------
set_t_text	ldx #WTA_TERMTXT	; Termintext Prg. Nr. laden
	stx wta_prg	; und bei Wähltaste ausführen

	ldx #TXT_TERMTXT	; Textnr. laden
	jsr puttxt	; und Text ausgeben

	stz ttxt_count	; Anzahl der eingegeben Zeichen löschen
	smb MOD_TXT,modus	; Tasten haben Textfunktion eintragen

	ldx term_nr	; Terminnr. laden
	jsr set_ttxtadr	; Terminadresse holen
	sta ttxt_adr	; low byte der Adr. eintragen
	sty ttxt_adr+1	; dito high Byte

wta_tein_e	rts

termtxt_txt	.shift "Text>"


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Wähltaste und eingeschaltetem Termintage-Eingabe-Modus
;	: Tastenwert (1 bis ...) im Accu
;
; Ausgang	: Termintage eingegeben
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

wta_termday	cmp #TERM_DAYE	; Speichern der Termintage beendet ?
	beq set_t_text	; ja, Termintext-Eingabe vorbereiten

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

	cmp #7		; ist Wahl ok ?, So=0, Sa=6 
	bcs wta_tday_e	; nein, Ende
	
	tax		; Tastennr. 0-9 kopieren
	lda #01		; BIT für Tastennr. 0, (0=So)
tday_getbit	dex		; BIT-Nr. für Termintag erzeugen
	bmi wta_tday_1	; Nr. gefunden
	asl a		; BIT auf nächsten Tag schieben
	bra tday_getbit	; nächsten Tag testen

wta_tday_1	ldy term_nr	; akt. Termin laden
	eor term_days,y	; BIT für Tag ein/ausblenden
	sta term_days,y	; und zurückschreiben
	jmp put_termday	; Termintage mit Belegtkennzeichnung ausgeben

wta_tday_e	rts


; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Wähltaste und eingeschaltetem Termintext-Eingabe-Modus
;	: Tastenwert (1 bis ...) im Accu
;
; Ausgang	: Termintext eingegeben
;
; Register	: -------
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

wta_termtxt	jsr wta_to_asc	; Tastenwert nach ASCII wandeln
	jmp ttxt_ein	; und in Termintext-Buffer eintragen



; =========================================================================
;
; Type	: Hauptprg.
;
; Eingang	: bei Taste in X/Y-Matrix und eingesch. Termintext-Eingabe-Modus
;	: Tastenwert im Accu
;	: Offset auf Tastaturtabelle in X-Reg.
;
; Ausgang	: Termintext eingegeben
;	: sec: Taste hat Textfunktion
;	: clc: Tastenprogramm ausführen 
;
; Register	: Accu, X
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

txt_tast	txa		; Offset auf Tastenberechtigung kopieren
	lsr		; Offset auf Texteintrag erzeugen
	tax
	lda tast_txt,x	; Textwert aus Berechtigung laden
	beq txt_tast_e	; Taste hat keine Textfunktion

	jsr ttxt_ein	; Text in Termintext-Buffer eintragen
	sec		; Taste hat Textf., kein Tastenprg. ausführen
	rts

txt_tast_e	clc		; Taste hat keine Textf., Tastenprg. ausführen
	rts


; =========================================================================
;
; Type	: Unterprg.
;	: Terminnr. und Belegtzustände ausgeben
;
; Eingang	: -------
;
; Ausgang	: Ausgabe der Terminnr. 1-8 und der dazugehörigen Belegtzustände
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

put_termnr	ldx #01		; Terminnr. 1 laden
put_tnr_lp	txa		; für Displayausgabe kopieren
	jsr wta_displ	; und Ziffer ins Display schreiben

	lda #SPACE	; SPACE laden
	dex		; Offset auf Termin erzeugen
	ldy term_days,x	; ist der Termin belegt ?
	beq put_tnr_1	; nein, Space ausgeben

	lda #"*"	; Belegt-Kennzeichnung laden
	
put_tnr_1	jsr putchar	; Belegtzustand ausgeben
	inx		; nächsten Termin einstellen
	inx
	cpx #MAX_TERM+1	; alle Termine ausgegeben ?
	bcc put_tnr_lp	; nein, nächsten ausgeben

	rts


; =========================================================================
;
; Type	: Unterprg.
;	: Terminzeitadr. holen
;
; Eingang	: Terminnr. in X-Reg.
;
; Ausgang	: low Adr. der Terminzeit-Struktur des Termins im Accu
;	: high in Y-Reg
;
; Register	: Accu, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

set_tti_adr	phx		; Register retten
	lda #>term_time	; high Byte der Terminzeit Struktur laden
	sta hlp_reg	; und Adr. merken
	lda #<term_time	; dito low Byte

set_tti_lp	dex
	bmi set_tti_end	; Termin gefunden, Ende

	clc
	adc #4		; 4 Zeiteinträge pro Termin
	bcc set_tti_lp	; kein Überlauf

	inc hlp_reg	; high Byte nachführen
	bra set_tti_lp	; nächsten Termin einstellen

set_tti_end	ldy hlp_reg	; Adr. high laden, low im Accu
	plx		; Register zurück
	rts


; =========================================================================
;
; Type	: Unterprg.
;	: Termindaten des Termins ausgeben
;
; Eingang	: ------
;
; Ausgang	: Ausgabe der Terminzeit bei belegten Terminen
;	: Ausgabe der aktuellen Uhrzeit bei freien Terminen
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

put_termdat	ldx #TXT_TERMWHL	; Textnr. laden (Termin:)
	jsr puttxt	; und Text ausgeben

	ldx #TXT_TERMEIN	; Textnr. laden ("  > ")
	jsr puttxt	; und Text ausgeben

	ldx term_nr	; Terminnr. laden
	jsr set_tti_adr	; Adr. der Terminzeit-Struktur holen
	sta ttime_adr	; low Byte eintragen
	sty ttime_adr+1	; dito high

	; Terminzeit ausgeben
	; -------------------
	ldy #03

put_term_lp	lda term_days,x	; ist Termin belegt ?
	bne put_term_t	; ja, Terminzeit ausgeben

	phx		; Terminnr. retten
	ldx term_uhr_f,y	; Offset auf Uhr-Ausgabe laden
	lda uhr_buff,x	; Uhrzeit laden
	plx		; Terminnr. zurück
	bra put_uhr_t	; und ausgeben

put_term_t	lda (ttime_adr),y	; Termin-Zeitwert laden
put_uhr_t	jsr hextodez	; Hexwert nach dezimal wandeln
	jsr putzahl	; und dezimal ausgeben
	lda term_trnz,y	; Trennzeichen laden
	jsr putchar	; und ausgeben
	dey		; alle Zeichen ausgegeben ?
	bpl put_term_lp	; nein


	; Terminnr. ausgeben
	; ------------------
	lda #7		; Cursorposition laden
	jsr curs_set	; und setzen
	inx		; Terminnr. 1-8 erzeugen
	txa		; Terminnr. kopieren
	jsr wta_displ	; und Ziffer ins Display schreiben

	bbs MOD_SP,modus,put_t_curs	; Speichern ist aktiv, Cursor ein

	rts		; bei Kontrolle nur Zeit anzeigen, Cursor aus

	; Cursor auf Eingabe setzen
	; -------------------------
put_t_curs	lda #11		; Cursorposition laden
	jsr curs_set	; und auf Terminzeit setzen
	jmp curs_on	; Cursor einschalten


termein_txt	.shift "   > "
term_trnz	.text " . :"	; Trennzeichen
term_uhr_f	.byte MON,TAG,MIN,STD	; Ausg. der Uhrzeit für Termin, rückwärts


; =========================================================================
;
; Type	: Unterprg.
;	: Termintage und Belegtzustände ausgeben
;
; Eingang	: ---------
;
; Ausgang	: Ausgabe der Termintage und der dazugehörigen Belegtzustände
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

put_termday	ldx #TXT_TERMDAY	; Textnr. laden
	jsr puttxt	; und Text ausgeben

	lda #1		; Position des Cursors laden
	jsr curs_set	; und setzen

	ldy term_nr	; Terminnr. laden
	ldx #6		; Anzahl der Tage laden
	lda term_days,y	; Zustand der Tage (ein/aus) laden
	sta hlp_reg	; und ins Hilfregister schreiben

put_tday_lp lda dp_bu_po	; Cursorpos. laden
	clc
	adc #2		; auf akt. Tag stellen
	jsr curs_set	; und Cursor setzen

	lda #SPACE	; Char. für nicht belegt laden
	lsr hlp_reg	; BIT ins Carry schieben
	bcc put_tday_1	; Tag ist nicht eingeschaltet

	lda #"*"	; Belegtkennzeichnung laden

put_tday_1	jsr putchar	; Kennzeichnung ausgeben
	dex		; nächsten Tag einstellen
	bpl put_tday_lp	; und Tag testen

	rts


termday_txt	.shift "0So 1M 2D 3M 4D 5F 6Sa"


; =========================================================================
;
; Type	: Unterprg.
;	: Termintextadr. holen
;
; Eingang	: Terminnr. in X-Reg.
;
; Ausgang	: low Adr. der Termintext-Struktur des Termins im Accu
;	: high in Y-Reg
;
; Register	: Accu, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

set_ttxtadr	phx		; Register retten
	lda #>term_text	; high Byte der Termintext Struktur laden
	sta hlp_reg	; high Byte merken
	lda #<term_text	; dito low Byte

set_ttxt_lp	dex
	bmi set_ttxt_e	; Termin gefunden, Ende

	clc
	adc #TTXT_LEN	; Anzahl der Textzeichen pro Termin dazu
	bcc set_ttxt_lp	; kein Überlauf

	inc hlp_reg	; high Byte nachführen
	bra set_ttxt_lp	; nächsten Termin einstellen

set_ttxt_e	ldy hlp_reg	; Adr. high laden, low im Accu
	plx		; Register zurück
	rts


; =========================================================================
;
; Type	: Unterprg.
;
; Eingang	: Character im Accu
;
; Ausgang	: Termintext im Termin Buffer eingetragen wenn Platz frei
;
; Register	: Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

ttxt_ein	ldy ttxt_count	; Anzahl der eingegeben Textzeichen laden
	cpy #TTXT_LEN-1	; ist noch Platz im Termintext-Buffer ?
	bcs ttxt_ein_e	; nein, Zeichen nicht eintragen

	inc ttxt_count	; Anz. Textzeichen+1
	sta (ttxt_adr),y	; Zeichen im Textspeicher ablegen
	jsr putchar	; und im Display anzeigen
	iny
	lda #$00	; Endekennung laden
	sta (ttxt_adr),y	; und im Textspeicher ablegen

ttxt_ein_e	rts


; =========================================================================
;
; Type	: Unterprg.
;	: Termintext im Display zentriert ausgeben
;
; Eingang	: Terminnr. in "term_nr" eingetragen
;
; Ausgang	: Termintext des in "term_nr" eingestellten Termins ausgegeben
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

ttxt_out	ldx term_nr	; Terminnr. laden
	jsr set_ttxtadr	; Terminadresse einstellen
	sta ttxt_adr	; low byte der Adr. eintragen
	sty ttxt_adr+1	; dito high Byte

	jsr dp_clr	; Display löschen
	lda #23		; Cursor auf letztes Zeichen im Display stellen
	jsr curs_set	; Cursor setzen

	ldy #$00	; Offset auf akt. Zeichen im Textbuffer

ttxt_out_lp	lda (ttxt_adr),y	; Zeichen aus Textspeicher holen
	beq ttxt_out_z	; es war das letzte Zeichen, Text zentrieren

	jsr putchar	; und im Display anzeigen
	iny
	cpy #TTXT_LEN	; sind alle Zeichen geholt ?
	bcc ttxt_out_lp	; nein, nächstes Zeichen holen

ttxt_out_z	sty hlp_reg	; Anzahl der Zeichen merken
	lda #24		; max. Anzahl der Zeichen im Display laden
	sec
	sbc hlp_reg	; Anzahl der Zeichen im Display abziehen
	beq ttxt_out_e	; Display komplett mit Text gefüllt, Ende

	lsr a		; restliche Zeichen (Space`s) halbieren

ttxt_out_1	jsr putspace	; Text nach links schieben
	dec a		; Anzahl der Space-1
	bpl ttxt_out_1	; Text noch nicht mittig im Display

ttxt_out_e	rts


; =========================================================================
;
; Type	: Hauptprg.
;	: alle 60 Sekunden prüfen ob ein Termin erreicht ist
;
; Eingang	: von Hauptprg.-Schleife
;
; Ausgang	: BIT für erreichten Termin in "err_term" eingetragen
;
; Register	: Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

term_ko	lda uhr_buff+SEK	; akt. Sekunde laden
	bne term_ko_end	; kein Minuten Überlauf, Termin nicht testen

	ldx #MAX_TERM-1	; zu prüfende Terminnr. laden
term_ko_0	phx		; Terminnr. retten
	lda term_days,x	; ist Termin belegt ?
	beq term_ko_nxt	; nein, nächsten Termin einstellen

	jsr set_tti_adr	; Adr. der Terminzeit-Struktur holen
	sta ind_adr	; low Byte eintragen
	sty ind_adr+1	; dito high


	; Terminzeit mit akt. Uhrzeit vergleichen
	; ---------------------------------------
term_ko_1	ldy #03		; Offset auf Zeitwert laden

term_ko_lp	ldx term_uhr_f,y	; Offset auf Uhr-Wert laden
	lda uhr_buff,x	; Uhrzeit laden
	cmp (ind_adr),y	; ist Termin-Zeitwert gleich ?
	beq term_ko_2	; ja

	; täglichen Termin testen
	; -----------------------
	cpy #1		; war es falscher Tag
	bne term_ko_nxt	; nein, nächsten Termin testen

	lda (ind_adr),y	; Termintag laden
	cmp #99		; soll Termin jeden Tag kommen ?
	bne term_ko_nxt	; nein, nächsten Termin testen

term_ko_2	dey		; alle Zeiten verglichen ?
	bpl term_ko_lp	; nein

	; BIT für erreichten Termin eintragen
	; -----------------------------------
	plx		; Terminnr. holen
	phx		; Stack wieder richten
	lda #00		; BIT-Nr. für 1.Termin laden
	sec
term_set_lp	rol a		; BIT für entsprechenden Termin erzeugen
	dex		; Termin gefunden ?
	bpl term_set_lp	; nein, nächstes BIT einstellen

	ora err_term	; Zustand der erreichten Termine dazu
	sta err_term	; BIT für erreichten Termin eingetragen

term_ko_nxt	plx		; Terminnr. zurück
	dex		; nächsten Termin einstellen
	bpl term_ko_0	; und Terminzeit testen

term_ko_end	rts


; =========================================================================
;
; Type	: Hauptprg.
;	: erreichten Termin ins Display schreiben
;
; Eingang	: wird von Uhrausgabe aufgerufen wenn "err_term" != 0
;	: "err_term" Wert im Accu
;
; Ausgang	: Text des erreichten Termins im Display
;
; Register	: Accu, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

put_errterm	ldy #$ff	; Terminstartnr. laden
	cpy term_nr	; wurde Termin-Summer schon gebracht ?
	bne put_err_lp	; ja, Ende

	stz term_su	; Termin-Summer bringen

put_err_lp	iny		; nächste Terminnr. einstellen
	lsr a		; Termin gefunden ?
	bcc put_err_lp	; nein, nächsten Termin testen

	cpy term_nr	; wurde Termintext schon ausgegeben ?
	beq put_ert_1	; ja, Ende

	sty term_nr	; Terminnr. eintragen
	jsr ttxt_out	; Termintext ausgeben

put_ert_1	jmp set_term_su	; Termin-Summer bringen


; =========================================================================
;
; Type	: Hauptprg.
;	: Terminsummer bei erreichtem Termin bringen
;
; Eingang	: bei erreichtem Termin und Terminausgabe
;
; Ausgang	: Summer für Termin ein/aus
;
; Register	: Accu, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

set_term_su	lda term_su	; Anzahl der Termin-Summer-Töne
	cmp #ANZ_TERMSU	; alle Töne ausgegeben ?
	bcs term_su_end	; ja, Summer nicht schalten

	lda struct_tim+TERMSU_TIM_O	; Termin-Summer schalten ?
	bne term_su_end	; nein, Ende

	lda #TERMSU_TIM	; Timerwert für Summer ein/aus laden
	sta struct_tim+TERMSU_TIM_O	; Summer Timer aufziehen

	bbs ST_SU,su_stat,termsu_off	; Summer wieder ausschalten
	smb ST_SU,su_stat	; Summer einschalten
	rts

termsu_off	inc term_su	; Anzahl der Termin-Summer-Töne +1
	rmb ST_SU,su_stat	; Summer ausschalten
	
term_su_end	rts


; =========================================================================
;
; Type	: Hauptprg.
;	: erreichten Termin löschen
;
; Eingang	: bei Löschentaste und entsprechendem Wta-Prg.
;
; Ausgang	: Summer für Termin aus
;	: Termin-BIT ausgetragen
;
; Register	: Accu, X
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================

err_ter_clr	lda err_term	; ist ein Termin erreicht ?
	beq err_ter_end	; nein, Ende

	ldx #$ff	; Start-Terminnr. laden
	stx hlp_reg	; und einstellen
	clc
err_ter_lp	rol hlp_reg	; nächstes Termin-BIT einstellen
	lsr a		; Termin gefunden ?
	bcc err_ter_lp	; nein, nächsten Termin testen

	lda err_term	; Zustand der erreichten Termine laden
	and hlp_reg	; akt. Termin-BIT austragen
	sta err_term	; Terminstatus zurück
	jmp key_ende	; Ende Taste ausführen

err_ter_end	rts



