home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
develop
/
as65
/
demo
/
s1
/
tast_ausw.asm
< prev
next >
Wrap
Assembly Source File
|
1995-02-27
|
13KB
|
565 lines
;**************************************************************************
;
; Filename : TAST_AUSW.ASM
; ------------------------
;
; (c) 1990 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; Programmverteiler für Tasten in der X/Y-Matrix
;
;
;**************************************************************************
MODUL_START set * ; Größe des Moduls berechnen
; =========================================================================
;
; Funktion : Task für Tastaturabfrage
;
; Eingang : ---------
;
; Ausgang : ---------
;
; Register : ---------
;
; (c) by Thomas Lehmann Januar 1991
;
; =========================================================================
tast_task jsr wta_abfr ; Wähltastatur abfragen
bcc tast_task_1 ; keine Taste erkannt
jsr st_dp_tim ; Taste gedrückt, Display Timer aufziehen
jsr wta_ausw ; Taste auswerten, Prg. ausführen
tast_task_1 jsr tast_abfr ; Tasten in X/Y-Matrix abfragen
bcc tast_task_2 ; keine Taste erkannt
jsr st_dp_tim ; Taste gedrückt, Display Timer aufziehen
jsr tast_ausw ; Taste auswerten, Prg. ausführen
tast_task_2 jsr nxt_task ; nächste Task aktivieren
bra tast_task ; neuer Durchlauf
; =========================================================================
;
; Funktion : gedrückte Taste auswerten, Programmverteiler für Tasten
;
; Eingang : Offset auf Tastatur-Matrix im Accu (Tastenwert 1-...)
;
; Ausgang : entsprechendes Programm ausgewählt
; : Offset auf Tastaturtabelle in X-Reg.
; : Tastenwert in "tw"
; : Tastenwert im Accu wenn BTA-MODUS ein
;
; Register : Accu, X, Y
;
; (c) by Thomas Lehmann Feb. 1990
;
; =========================================================================
KEY_NR set *
t_prg_tab rta t_ausw_end ; TW 00, Taste nicht berrechtigt
HLP set *-KEY_NR
KEY_LTG equ HLP/2 ; Tastenwert
rta key_ltg ; Leitung
HLP set *-KEY_NR
KEY_TRN equ HLP/2
rta key_trenn ; Trennen
HLP set *-KEY_NR
KEY_HLT equ HLP/2
rta key_halten ; Halten
rta key_ww ; Wahlwiederholung
rta key_merker ; Merker
HLP set *-KEY_NR
KEY_FSLH equ HLP/2
rta key_fslh ; Freisprechen/Lauthören ein/aus
rta key_su ; Summer ein/aus
HLP set *-KEY_NR
KEY_BEA equ HLP/2
rta key_beantw ; Anrufbeantworter ein/aus
HLP set *-KEY_NR
KEY_POST equ HLP/2
rta key_post ; Postapparat ein/aus
HLP set *-KEY_NR
KEY_MOD equ HLP/2
rta key_modem ; Modem ein/aus
HLP set *-KEY_NR
KEY_ERDE equ HLP/2
rta key_erde ; Erd-Taste
HLP set *-KEY_NR
KEY_KO equ HLP/2
rta key_kontr ; Kontrolle
HLP set *-KEY_NR
KEY_SP equ HLP/2
rta key_sp ; Speicher
HLP set *-KEY_NR
KEY_2SP equ HLP/2
rta key_2sp ; 2.Speicher
HLP set *-KEY_NR
KEY_ENDE equ HLP/2
rta key_ende ; Ende
rta key_loesch ; löschen
HLP set *-KEY_NR
KEY_UHR equ HLP/2
rta key_uhr ; Uhr stellen
HLP set *-KEY_NR
KEY_TELBUCH equ HLP/2
rta key_telbuch ; Telefonbuch
HLP set *-KEY_NR
KEY_NAM equ HLP/2
rta key_namen ; Namentasten
HLP set *-KEY_NR
KEY_BABY equ HLP/2
rta key_baby ; Babyruf Funktion
HLP set *-KEY_NR
KEY_TASTER equ HLP/2
rta key_taster ; Taster
rta key_schalt ; Schalter
rta key_stat ; Statistik anzeigen
rta bta ; BTA
rta key_vers ; Version anzeigen
rta init_stk ; Reset
HLP set *-KEY_NR
KEY_TMODE equ HLP/2
rta key_tmode ; Terminal Mode
TAB_LEN set *-t_prg_tab ; Tabellenlänge
ANZ_TAST equ TAB_LEN/2 ; Anzahl der zu programmierenden Tasten
tast_ausw dec a ; Offset auf Tastatur-Matrix 0-...
asl ; je zwei Bytes pro Taste, TW und Tastennr.
tax ; Offset auf Tasteneintrag in Tabelle laden
lda tast_tab,x ; Tastenwert aus Berechtigung holen
sta tw ; Tastenwert ablegen
; Sonderfunktion wenn "SS off" testen
; -----------------------------------
jsr key_ss_off ; testen ob Taste erlaubt ist
bcc t_ausw_end ; Taste ist nicht zugelassen bei SS off
t_ausw_1 bbs MOD_NO_KEY,modus,t_ausw_end ; Tastaturausw. gesperrt
bbs MOD_KEYSPEC,modus,key_spec ; Spezialfunktion ausführen
jsr tst_key_txt ; testen ob Textmodus für Taste eingeschaltet
bcs t_ausw_end ; Taste hatte Textfunktion, Ende
; Prg. für Taste ausführen
; ------------------------
tast_ausw_2 asl ; TW, Offset auf Programmtabelle erzeugen
cmp #TAB_LEN ; Taste außerhalb des Gültigkeitsbereichs ?
bcs t_ausw_end ; ja, nicht ausführen
tay
lda t_prg_tab+1,y ; high Byte der Programmadr. laden
pha
lda t_prg_tab,y ; dito low Byte
pha
lda tw ; Tastenwert laden
t_ausw_end rts ; und Programm ausführen
; =========================================================================
;
; Funktion : Tastendruck während Tasten Spezialfunktion haben
; beide LED`s in der Taste werden eingeschaltet
;
; Eingang : Tastenwert im Accu
; : Offset auf Tastaturtabelle in X-Reg.
;
; Ausgang : -------
;
; Register : Accu, Y
;
; (c) by Thomas Lehmann Januar 1991
;
; =========================================================================
key_spec bbs MOD_KO,modus,put_keyval ; Tastenwert ausgeben
pha ; Tastenwert retten
lda #LD_L|LD_R|LD_ON ; LED-Wert laden
jsr set_led ; und beide LED einschalten
pla ; TW zurück
bbs MOD_TXT,modus,key_spec_1 ; ASCII-Text auf Taste berechtigen
jmp keyber ; Taste berechtigen
key_spec_1 jmp key_ascii ; ASCII-Text auf Taste berechtigen
; =========================================================================
;
; Funktion : testen ob Tastendruck bei SS off zugelassen
;
; Eingang : Tastenwert im Accu
; : Offset auf Tastaturtabelle in X-Reg.
;
; Ausgang : clc == Taste nicht zugelassen bei SS off
; sec == Taste zugelassen
;
; Register : --------
;
; (c) by Thomas Lehmann Juni 1991
;
; =========================================================================
key_ss_tab byte KEY_ENDE
byte KEY_LTG
byte KEY_HLT
byte KEY_TRN
TAB_LEN set *-key_ss_tab
key_ss_off
block
pha ; Tastenwert retten
phx ; Offset auf Tastenber. retten
sec ; Taste erstmal zugelassen
bbs SS_STAT,allg_stat,key_ok ; SS ist eingeschaltet, Taste OK
; alle zugelassenen Tasten testen
; -------------------------------
ldx #TAB_LEN-1 ; Tabellen Offset
loop cmp key_ss_tab,x ; Taste zugelassen ?
beq key_ok ; ja, Ende (SEC)
dex
bpl loop
clc ; Taste nicht zugelassen
key_ok plx ; Register zurück
pla
rts
bend
; =========================================================================
;
; Funktion : testen ob Taste Textfunktion hat
;
; Eingang : Tastenwert im Accu
; : Offset auf Tastaturtabelle in X-Reg.
;
; Ausgang : sec == Taste nicht weiter bearbeiten
; clc == Taste auswerten
;
; Register : --------
;
; (c) by Thomas Lehmann August 1991
;
; =========================================================================
keytxt_tab word ttxt_ein ; Text in Termintext-Buffer eintragen
word telb_name ; Name für Telefonbuch eingeben
keytxt_jmp ldx keytxt_prg ; Prg. für Tastentext Funktion laden
jmp (keytxt_tab,x) ; Programm ausführen
tst_key_txt
block
clc ; Taste hat keine Textfunktion
bbr MOD_TXT,modus,end_1 ; Textmodus ist ausgeschaltet
; testen ob Textzeichen auf Taste berechtigt ist
; ----------------------------------------------
pha ; Tastenwert retten
phx ; Offset auf Tastenber. retten
txa ; Offset auf Tastenberechtigung kopieren
lsr ; Offs. auf Text, CLC da immer modulo 2
tax
lda tast_txt,x ; Textwert aus Berechtigung laden
beq end ; Taste hat keine Textfunktion, CLC
jsr keytxt_jmp ; Funktion für Tasten Text ausführen
sec ; Taste hat Textf., kein Tastenprg. ausführen
end plx ; Register zurück
pla
end_1 rts
bend
; =========================================================================
;
; Funktion : Tastenwert und Text einer gedrückten Taste ausgeben
; Funktion wird durch "#" verlassen
;
; Eingang : Tastenwert im Accu
; : Offset auf Tastaturtabelle in X-Reg.
;
; Ausgang : -------
;
; Register : Accu, X, Y
;
; (c) by Thomas Lehmann Januar 1991
;
; =========================================================================
show_key lda #WTA_SHOWKEY ; Wähltasten umleiten
sta wta_prg
smb MOD_KEYSPEC,modus ; aktuellen Modus einleiten
ldx #<key_txt ; Text ausgeben
ldy #>key_txt
jmp puttxt
key_txt byte DSP_CLR
shift "Taste ? #=Ende"
; Einsprung wenn Taste gedrückt
; Tastentext und Tastenwert und Text ausgeben
; "A" 1600 loesch/quittier
; -------------------------------------------
put_keyval phx ; Tasten Offset retten
txa
lsr a ; Offset auf Textber. erzeugen
tax
jsr dp_clr ; Display löschen
lda tast_txt,x ; ASCII-Zeichen für Taste aus Ber. holen
beq put_kval_1
jsr putchar ; Tasten Text Zeichen ausgeben
jsr space
put_kval_1 plx
; Berechtigungs Wert und Name ausgeben
; ------------------------------------
lda tast_tab+1,x ; Tastennr. laden
pha
lda tast_tab,x ; Tastenfunktion laden
tax
jsr get_keyber ; Adr. der Tastenberechtigung ermitteln
plx ; Tastennr. zurück
jmp put_keyber ; Tastenwert und Text ausgeben
; =======================
; Einsprung bei Wähltaste
; =======================
wta_showkey cmp #SHOWKEY_END ; Ende ?
bne showkey_e ; nein, weiter Tastenwerte zeigen
jmp key_ende ; Key Ende ausführen
showkey_e ldx #<keywta_txt ; Text ausgeben
ldy #>keywta_txt
jsr puttxt
jsr wta_to_asc ; Wtastenwert in ASCII wandeln
jmp putchar ; Tasten Nr. ausgeben
keywta_txt byte DSP_CLR
shift "Waehltaste "
; =========================================================================
;
; Funktion : gedrückte Wähltaste auswerten, Programmverteiler für Wähltasten
;
; Eingang : Tastenwert (1-12) im Accu
;
; Ausgang : ---------
;
; Register : X
;
; (c) by Thomas Lehmann Feb. 1990
;
; =========================================================================
wta_ausw ldx wta_prg Programmnr. bei Wähltaste
jmp (wta_prg_tab,x) Programm ausführen
; ====================================
; Tabelle der Funktionen bei Wähltaste
; ====================================
wta_prg_tab word wta_wahl 00, Wahl auf Leitung
word wta_funkt Funktion der Wähltaste über Tabelle
word wta_bta_whl BTA Modus auswählen
word wta_keyber BTA Modus Tastenberechtigung
word wta_ascii BTA Modus Textberechtigung
word wta_uhrst Uhr stellen
word wta_showkey Tastenwert zeigen
word wta_spnam Namentasten speichern
word wta_termwhl Terminnr. auswählen
word wta_termein Terminzeit eingeben
word wta_termtxt Termintext eingeben
word wta_termday Termintage eingeben
word wta_stat Statistik Menu auswählen
word wta_berclr Tastenberechtigung löschen ?
word wta_sprel Relais speichern
word wta_spgeb Gebührenfaktor speichern
word wta_setup Setup Routine
word wta_sptzykl Termin Zyklus
word wta_tmode Terminal Mode aktiv
word _rts kein Programm ausführen
_rts rts
; =========================================================================
;
; Funktion : Funktionstabelle für Wähltasten installieren
; die Wähltasten werden automatisch auf "wta_funkt" umgeleitet
;
; Eingang : Tabellenlänge (2-Byte Länge) im Accu
; Adr. der Tabelle in X/Y
;
; Ausgang : ---------
;
; Register : Accu
;
; (c) by Thomas Lehmann Feb. 1990
;
; =========================================================================
set_wta_fkt sta wta_tab_len ; Größe der Tabelle
stx wta_fkt ; Adresse der Funktions-Tabelle eintragen
sty wta_fkt+1
lda #WTA_FUNKT ; Wähltasten auf Funktionsauswertung umleiten
sta wta_prg
rts
; =========================================================================
;
; Funktion : Funktion für betätigte Wähltaste über Tabelle ausführen
;
; Eingang : Tastenwert (1-12) im Accu
;
; Ausgang : ---------
;
; Register : Accu, Y
;
; (c) by Thomas Lehmann Feb. 1990
;
; =========================================================================
wta_funkt dec a ; Tastenwert 0-... erzeugen
asl ; mal 2 = Offset auf Programm
tay
cpy wta_tab_len ; ist Wähltaste gültig ?
bcs _rts ; nein, Ende
lda (wta_fkt),y ; Adr. der Funktion für Wähltaste laden
sta hlp_reg
iny
lda (wta_fkt),y
sta hlp_reg+1
jmp (hlp_reg) ; Programm für gedrückte Wähltaste ausführen
; =========================================================================
;
; Funktion : Taste in Tasten-Berechtigung suchen
;
; Eingang : TW im Accu
; Tastennr. in Y, nur TW Y == $ff
; Offset ab wo gesucht wird in X, (vom Beginn an == 00)
;
; Ausgang : SEC == Taste gefunden
; Offset auf Tastenber. der gefundenen Taste in X
;
; Register : X
;
; (c) by Thomas Lehmann August 1991
;
; =========================================================================
search_key
block
loop inx ; nächste Taste einstellen
inx
cpx #TAST_BER ; alle Tasten getestet ?
bcs no_key ; ja, Ende
cmp tast_tab,x ; TW mit Taste aus Ber. vergleichen
bne loop ; nächste Taste testen
; Tastennr. testen
; ----------------
pha ; TW retten
tya ; Tastennr. laden
cmp #$ff ; Tastennr. ebenfalls testen ?
beq found_key ; nein, Taste gefunden (SEC), Offset in X
cmp tast_tab+1,x ; Tastennr. auch gleich ?
beq found_key ; TW ist gleich (SEC), Offset in X
pla ; TW zurück
bra loop ; nein, nächsten Tastenwert testen
no_key clc ; Taste nicht gefunden
rts
found_key pla ; TW zurück
rts
bend
; --------------------------------------------------------------------------
HLP set *
_TAST_AUSW equ HLP-MODUL_START ; Größe des Moduls