home *** CD-ROM | disk | FTP | other *** search
/ World of A1200 / World_Of_A1200.iso / programs / develop / as65 / demo / s1 / tast_ausw.asm < prev    next >
Assembly Source File  |  1995-02-27  |  13KB  |  565 lines

  1. ;**************************************************************************
  2. ;
  3. ; Filename : TAST_AUSW.ASM
  4. ; ------------------------
  5. ;
  6. ; (c) 1990 by Thomas Lehmann
  7. ;
  8. ;
  9. ; Jackophone V5.00
  10. ;
  11. ;
  12. ; Programmverteiler für Tasten in der X/Y-Matrix
  13. ;
  14. ;
  15. ;**************************************************************************
  16.  
  17. MODUL_START    set    *    ; Größe des Moduls berechnen
  18.  
  19.  
  20.  
  21.  
  22. ; =========================================================================
  23. ;
  24. ; Funktion    : Task für Tastaturabfrage
  25. ;
  26. ; Eingang    : ---------
  27. ;
  28. ; Ausgang    : ---------
  29. ;
  30. ; Register    : ---------
  31. ;
  32. ; (c) by Thomas Lehmann Januar 1991
  33. ;
  34. ; =========================================================================
  35.  
  36. tast_task    jsr wta_abfr    ; Wähltastatur abfragen
  37.     bcc tast_task_1    ; keine Taste erkannt
  38.  
  39.     jsr st_dp_tim    ; Taste gedrückt, Display Timer aufziehen
  40.     jsr wta_ausw    ; Taste auswerten, Prg. ausführen
  41.  
  42. tast_task_1    jsr tast_abfr    ; Tasten in X/Y-Matrix abfragen
  43.     bcc tast_task_2    ; keine Taste erkannt
  44.  
  45.     jsr st_dp_tim    ; Taste gedrückt, Display Timer aufziehen
  46.     jsr tast_ausw    ; Taste auswerten, Prg. ausführen
  47.  
  48. tast_task_2    jsr nxt_task    ; nächste Task aktivieren
  49.     bra tast_task    ; neuer Durchlauf
  50.  
  51.  
  52.  
  53.  
  54. ; =========================================================================
  55. ;
  56. ; Funktion    : gedrückte Taste auswerten, Programmverteiler für Tasten
  57. ;
  58. ; Eingang    : Offset auf Tastatur-Matrix im Accu (Tastenwert 1-...)
  59. ;
  60. ; Ausgang    : entsprechendes Programm ausgewählt
  61. ;    : Offset auf Tastaturtabelle in X-Reg.
  62. ;    : Tastenwert in "tw"
  63. ;    : Tastenwert im Accu wenn BTA-MODUS ein
  64. ;
  65. ; Register    : Accu, X, Y
  66. ;
  67. ; (c) by Thomas Lehmann Feb. 1990
  68. ;
  69. ; =========================================================================
  70.  
  71. KEY_NR    set *
  72.  
  73.  
  74. t_prg_tab    rta t_ausw_end    ; TW 00, Taste nicht berrechtigt
  75.  
  76.  
  77. HLP    set    *-KEY_NR
  78. KEY_LTG    equ    HLP/2    ; Tastenwert
  79.     rta key_ltg    ; Leitung
  80.  
  81. HLP    set    *-KEY_NR
  82. KEY_TRN    equ    HLP/2
  83.     rta key_trenn    ; Trennen
  84.  
  85. HLP    set    *-KEY_NR
  86. KEY_HLT    equ    HLP/2
  87.     rta key_halten    ; Halten
  88.     rta key_ww    ; Wahlwiederholung
  89.     rta key_merker    ; Merker
  90.  
  91. HLP    set    *-KEY_NR
  92. KEY_FSLH    equ    HLP/2
  93.     rta key_fslh    ; Freisprechen/Lauthören ein/aus
  94.  
  95.     rta key_su    ; Summer ein/aus
  96.  
  97. HLP    set    *-KEY_NR
  98. KEY_BEA    equ    HLP/2
  99.     rta key_beantw    ; Anrufbeantworter ein/aus
  100.  
  101. HLP    set    *-KEY_NR
  102. KEY_POST    equ    HLP/2
  103.     rta key_post    ; Postapparat ein/aus
  104.  
  105. HLP    set    *-KEY_NR
  106. KEY_MOD    equ    HLP/2
  107.     rta key_modem    ; Modem ein/aus
  108.  
  109. HLP    set    *-KEY_NR
  110. KEY_ERDE    equ    HLP/2
  111.     rta key_erde    ; Erd-Taste
  112.  
  113. HLP    set    *-KEY_NR
  114. KEY_KO    equ    HLP/2
  115.     rta key_kontr    ; Kontrolle
  116.  
  117. HLP    set    *-KEY_NR
  118. KEY_SP    equ    HLP/2
  119.     rta key_sp    ; Speicher
  120.  
  121. HLP    set    *-KEY_NR
  122. KEY_2SP    equ    HLP/2
  123.     rta key_2sp    ; 2.Speicher
  124.  
  125. HLP    set    *-KEY_NR
  126. KEY_ENDE    equ    HLP/2
  127.     rta key_ende    ; Ende
  128.  
  129.     rta key_loesch    ; löschen
  130.  
  131. HLP    set    *-KEY_NR
  132. KEY_UHR    equ    HLP/2
  133.     rta key_uhr    ; Uhr stellen
  134.  
  135. HLP    set    *-KEY_NR
  136. KEY_TELBUCH    equ    HLP/2
  137.     rta key_telbuch    ; Telefonbuch
  138.  
  139. HLP    set    *-KEY_NR
  140. KEY_NAM    equ    HLP/2
  141.     rta key_namen    ; Namentasten
  142.  
  143. HLP    set    *-KEY_NR
  144. KEY_BABY    equ    HLP/2
  145.     rta key_baby    ; Babyruf Funktion
  146.  
  147. HLP    set    *-KEY_NR
  148. KEY_TASTER    equ    HLP/2
  149.     rta key_taster    ; Taster
  150.     rta key_schalt    ; Schalter
  151.  
  152.     rta key_stat    ; Statistik anzeigen
  153.     rta bta    ; BTA
  154.     rta key_vers    ; Version anzeigen
  155.     rta init_stk    ; Reset
  156.  
  157. HLP    set    *-KEY_NR
  158. KEY_TMODE    equ    HLP/2
  159.     rta key_tmode    ; Terminal Mode
  160.  
  161.  
  162.  
  163. TAB_LEN    set    *-t_prg_tab    ; Tabellenlänge
  164. ANZ_TAST    equ    TAB_LEN/2        ; Anzahl der zu programmierenden Tasten
  165.  
  166.  
  167.  
  168.  
  169. tast_ausw    dec a        ; Offset auf Tastatur-Matrix 0-...
  170.     asl        ; je zwei Bytes pro Taste, TW und Tastennr.
  171.     tax        ; Offset auf Tasteneintrag in Tabelle laden
  172.     lda tast_tab,x    ; Tastenwert aus Berechtigung holen
  173.     sta tw        ; Tastenwert ablegen
  174.  
  175.  
  176.     ; Sonderfunktion wenn "SS off" testen
  177.     ; -----------------------------------
  178.     jsr key_ss_off    ; testen ob Taste erlaubt ist
  179.     bcc t_ausw_end    ; Taste ist nicht zugelassen bei SS off
  180.  
  181.  
  182. t_ausw_1    bbs MOD_NO_KEY,modus,t_ausw_end    ; Tastaturausw. gesperrt
  183.     bbs MOD_KEYSPEC,modus,key_spec    ; Spezialfunktion ausführen
  184.  
  185.     jsr tst_key_txt    ; testen ob Textmodus für Taste eingeschaltet
  186.     bcs t_ausw_end    ; Taste hatte Textfunktion, Ende
  187.  
  188.  
  189.     ; Prg. für Taste ausführen
  190.     ; ------------------------
  191. tast_ausw_2    asl        ; TW, Offset auf Programmtabelle erzeugen
  192.     cmp #TAB_LEN    ; Taste außerhalb des Gültigkeitsbereichs ?
  193.     bcs t_ausw_end    ; ja, nicht ausführen
  194.  
  195.     tay
  196.     lda t_prg_tab+1,y    ; high Byte der Programmadr. laden
  197.     pha
  198.     lda t_prg_tab,y    ; dito low Byte
  199.     pha
  200.     lda tw        ; Tastenwert laden
  201.  
  202. t_ausw_end    rts        ; und Programm ausführen
  203.  
  204.  
  205.  
  206. ; =========================================================================
  207. ;
  208. ; Funktion    : Tastendruck während Tasten Spezialfunktion haben
  209. ;      beide LED`s in der Taste werden eingeschaltet
  210. ;
  211. ; Eingang    : Tastenwert im Accu
  212. ;    : Offset auf Tastaturtabelle in X-Reg.
  213. ;
  214. ; Ausgang    : -------
  215. ;
  216. ; Register    : Accu, Y
  217. ;
  218. ; (c) by Thomas Lehmann Januar 1991
  219. ;
  220. ; =========================================================================
  221.  
  222. key_spec    bbs MOD_KO,modus,put_keyval    ; Tastenwert ausgeben
  223.  
  224.     pha        ; Tastenwert retten
  225.     lda #LD_L|LD_R|LD_ON    ; LED-Wert laden
  226.     jsr set_led    ; und beide LED einschalten
  227.     pla        ; TW zurück
  228.     bbs MOD_TXT,modus,key_spec_1    ; ASCII-Text auf Taste berechtigen
  229.  
  230.     jmp keyber    ; Taste berechtigen
  231. key_spec_1    jmp key_ascii    ; ASCII-Text auf Taste berechtigen
  232.  
  233.  
  234. ; =========================================================================
  235. ;
  236. ; Funktion    : testen ob Tastendruck bei SS off zugelassen
  237. ;
  238. ; Eingang    : Tastenwert im Accu
  239. ;    : Offset auf Tastaturtabelle in X-Reg.
  240. ;
  241. ; Ausgang    : clc == Taste nicht zugelassen bei SS off
  242. ;      sec == Taste zugelassen
  243. ;
  244. ; Register    : --------
  245. ;
  246. ; (c) by Thomas Lehmann Juni 1991
  247. ;
  248. ; =========================================================================
  249.  
  250. key_ss_tab    byte KEY_ENDE
  251.     byte KEY_LTG
  252.     byte KEY_HLT
  253.     byte KEY_TRN
  254.  
  255. TAB_LEN    set *-key_ss_tab
  256.  
  257.  
  258. key_ss_off
  259.     block
  260.     pha        ; Tastenwert retten
  261.     phx        ; Offset auf Tastenber. retten
  262.  
  263.     sec        ; Taste erstmal zugelassen
  264.     bbs SS_STAT,allg_stat,key_ok    ; SS ist eingeschaltet, Taste OK
  265.  
  266.     ; alle zugelassenen Tasten testen
  267.     ; -------------------------------
  268.     ldx #TAB_LEN-1    ; Tabellen Offset
  269. loop    cmp key_ss_tab,x    ; Taste zugelassen ?
  270.     beq key_ok    ; ja, Ende (SEC)
  271.  
  272.     dex
  273.     bpl loop
  274.  
  275.     clc        ; Taste nicht zugelassen
  276. key_ok    plx        ; Register zurück
  277.     pla
  278.     rts
  279.     bend
  280.  
  281.  
  282. ; =========================================================================
  283. ;
  284. ; Funktion    : testen ob Taste Textfunktion hat
  285. ;
  286. ; Eingang    : Tastenwert im Accu
  287. ;    : Offset auf Tastaturtabelle in X-Reg.
  288. ;
  289. ; Ausgang    : sec == Taste nicht weiter bearbeiten
  290. ;      clc == Taste auswerten
  291. ;
  292. ; Register    : --------
  293. ;
  294. ; (c) by Thomas Lehmann August 1991
  295. ;
  296. ; =========================================================================
  297.  
  298. keytxt_tab    word ttxt_ein    ; Text in Termintext-Buffer eintragen
  299.     word telb_name    ; Name für Telefonbuch eingeben
  300.  
  301. keytxt_jmp    ldx keytxt_prg    ; Prg. für Tastentext Funktion laden
  302.     jmp (keytxt_tab,x)    ; Programm ausführen
  303.  
  304.  
  305. tst_key_txt
  306.     block
  307.     clc        ; Taste hat keine Textfunktion
  308.     bbr MOD_TXT,modus,end_1    ; Textmodus ist ausgeschaltet
  309.  
  310.     ; testen ob Textzeichen auf Taste berechtigt ist
  311.     ; ----------------------------------------------
  312.     pha        ; Tastenwert retten
  313.     phx        ; Offset auf Tastenber. retten
  314.     txa        ; Offset auf Tastenberechtigung kopieren
  315.     lsr        ; Offs. auf Text, CLC da immer modulo 2
  316.     tax
  317.     lda tast_txt,x    ; Textwert aus Berechtigung laden
  318.     beq end        ; Taste hat keine Textfunktion, CLC
  319.  
  320.     jsr keytxt_jmp    ; Funktion für Tasten Text ausführen
  321.     sec        ; Taste hat Textf., kein Tastenprg. ausführen
  322.  
  323. end    plx        ; Register zurück
  324.     pla
  325. end_1    rts
  326.     bend
  327.  
  328.  
  329.  
  330. ; =========================================================================
  331. ;
  332. ; Funktion    : Tastenwert und Text einer gedrückten Taste ausgeben
  333. ;      Funktion wird durch "#" verlassen
  334. ;
  335. ; Eingang    : Tastenwert im Accu
  336. ;    : Offset auf Tastaturtabelle in X-Reg.
  337. ;
  338. ; Ausgang    : -------
  339. ;
  340. ; Register    : Accu, X, Y
  341. ;
  342. ; (c) by Thomas Lehmann Januar 1991
  343. ;
  344. ; =========================================================================
  345.  
  346. show_key    lda #WTA_SHOWKEY    ; Wähltasten umleiten
  347.     sta wta_prg
  348.     smb MOD_KEYSPEC,modus    ; aktuellen Modus einleiten
  349.     ldx #<key_txt    ; Text ausgeben
  350.     ldy #>key_txt
  351.     jmp puttxt
  352.  
  353. key_txt    byte DSP_CLR
  354.     shift    "Taste ?   #=Ende"
  355.  
  356.  
  357.  
  358.     ; Einsprung wenn Taste gedrückt
  359.     ; Tastentext und Tastenwert und Text ausgeben
  360.     ; "A" 1600 loesch/quittier
  361.     ; -------------------------------------------
  362. put_keyval    phx        ; Tasten Offset retten
  363.     txa
  364.     lsr a        ; Offset auf Textber. erzeugen
  365.     tax
  366.  
  367.     jsr dp_clr    ; Display löschen
  368.     lda tast_txt,x    ; ASCII-Zeichen für Taste aus Ber. holen
  369.     beq put_kval_1
  370.  
  371.     jsr putchar    ; Tasten Text Zeichen ausgeben
  372.     jsr space
  373. put_kval_1    plx
  374.  
  375.     ; Berechtigungs Wert und Name ausgeben
  376.     ; ------------------------------------
  377.     lda tast_tab+1,x    ; Tastennr. laden
  378.     pha
  379.     lda tast_tab,x    ; Tastenfunktion laden
  380.     tax
  381.     jsr get_keyber    ; Adr. der Tastenberechtigung ermitteln
  382.     plx        ; Tastennr. zurück
  383.     jmp put_keyber    ; Tastenwert und Text ausgeben
  384.  
  385.  
  386.  
  387.     ; =======================
  388.     ; Einsprung bei Wähltaste
  389.     ; =======================
  390. wta_showkey    cmp #SHOWKEY_END    ; Ende ?
  391.     bne showkey_e    ; nein, weiter Tastenwerte zeigen
  392.  
  393.     jmp key_ende    ; Key Ende ausführen
  394.  
  395. showkey_e    ldx #<keywta_txt    ; Text ausgeben
  396.     ldy #>keywta_txt
  397.     jsr puttxt
  398.     jsr wta_to_asc    ; Wtastenwert in ASCII wandeln
  399.     jmp putchar    ; Tasten Nr. ausgeben
  400.  
  401. keywta_txt    byte DSP_CLR
  402.     shift "Waehltaste "
  403.  
  404.  
  405.  
  406.  
  407.  
  408. ; =========================================================================
  409. ;
  410. ; Funktion    : gedrückte Wähltaste auswerten, Programmverteiler für Wähltasten
  411. ;
  412. ; Eingang    : Tastenwert (1-12) im Accu
  413. ;
  414. ; Ausgang    : ---------
  415. ;
  416. ; Register    : X
  417. ;
  418. ; (c) by Thomas Lehmann Feb. 1990
  419. ;
  420. ; =========================================================================
  421.  
  422. wta_ausw    ldx wta_prg    Programmnr. bei Wähltaste
  423.     jmp (wta_prg_tab,x)    Programm ausführen
  424.  
  425.  
  426.     ; ====================================
  427.     ; Tabelle der Funktionen bei Wähltaste
  428.     ; ====================================
  429. wta_prg_tab    word wta_wahl    00, Wahl auf Leitung
  430.     word wta_funkt    Funktion der Wähltaste über Tabelle
  431.     word wta_bta_whl    BTA Modus auswählen
  432.     word wta_keyber    BTA Modus Tastenberechtigung
  433.     word wta_ascii    BTA Modus Textberechtigung
  434.     word wta_uhrst    Uhr stellen
  435.     word wta_showkey    Tastenwert zeigen
  436.     word wta_spnam    Namentasten speichern
  437.     word wta_termwhl    Terminnr. auswählen
  438.     word wta_termein    Terminzeit eingeben
  439.     word wta_termtxt    Termintext eingeben
  440.     word wta_termday    Termintage eingeben
  441.     word wta_stat    Statistik Menu auswählen
  442.     word wta_berclr    Tastenberechtigung löschen ?
  443.     word wta_sprel    Relais speichern
  444.     word wta_spgeb    Gebührenfaktor speichern
  445.     word wta_setup    Setup Routine
  446.     word wta_sptzykl    Termin Zyklus
  447.     word wta_tmode    Terminal Mode aktiv
  448.  
  449.     word _rts    kein Programm ausführen
  450.  
  451.  
  452.  
  453. _rts    rts
  454.  
  455.  
  456. ; =========================================================================
  457. ;
  458. ; Funktion    : Funktionstabelle für Wähltasten installieren
  459. ;      die Wähltasten werden automatisch auf "wta_funkt" umgeleitet
  460. ;
  461. ; Eingang    : Tabellenlänge (2-Byte Länge) im Accu
  462. ;      Adr. der Tabelle in X/Y
  463. ;
  464. ; Ausgang    : ---------
  465. ;
  466. ; Register    : Accu
  467. ;
  468. ; (c) by Thomas Lehmann Feb. 1990
  469. ;
  470. ; =========================================================================
  471.  
  472. set_wta_fkt    sta wta_tab_len    ; Größe der Tabelle
  473.     stx wta_fkt    ; Adresse der Funktions-Tabelle eintragen
  474.     sty wta_fkt+1
  475.     lda #WTA_FUNKT    ; Wähltasten auf Funktionsauswertung umleiten
  476.     sta wta_prg
  477.     rts
  478.  
  479.  
  480. ; =========================================================================
  481. ;
  482. ; Funktion    : Funktion für betätigte Wähltaste über Tabelle ausführen
  483. ;
  484. ; Eingang    : Tastenwert (1-12) im Accu
  485. ;
  486. ; Ausgang    : ---------
  487. ;
  488. ; Register    : Accu, Y
  489. ;
  490. ; (c) by Thomas Lehmann Feb. 1990
  491. ;
  492. ; =========================================================================
  493.  
  494. wta_funkt    dec a        ; Tastenwert 0-... erzeugen
  495.     asl        ; mal 2 = Offset auf Programm
  496.     tay
  497.     cpy wta_tab_len    ; ist Wähltaste gültig ?
  498.     bcs _rts    ; nein, Ende
  499.  
  500.     lda (wta_fkt),y    ; Adr. der Funktion für Wähltaste laden
  501.     sta hlp_reg
  502.     iny
  503.     lda (wta_fkt),y
  504.     sta hlp_reg+1
  505.     jmp (hlp_reg)    ; Programm für gedrückte Wähltaste ausführen
  506.  
  507.  
  508.  
  509.  
  510. ; =========================================================================
  511. ;
  512. ; Funktion    : Taste in Tasten-Berechtigung suchen
  513. ;
  514. ; Eingang    : TW im Accu
  515. ;      Tastennr. in Y, nur TW Y == $ff
  516. ;      Offset ab wo gesucht wird in X, (vom Beginn an == 00)
  517. ;
  518. ; Ausgang    : SEC == Taste gefunden
  519. ;      Offset auf Tastenber. der gefundenen Taste in X
  520. ;
  521. ; Register    : X
  522. ;
  523. ; (c) by Thomas Lehmann August 1991
  524. ;
  525. ; =========================================================================
  526.  
  527. search_key
  528.     block
  529. loop    inx        ; nächste Taste einstellen
  530.     inx
  531.     cpx #TAST_BER    ; alle Tasten getestet ?
  532.     bcs no_key    ; ja, Ende
  533.  
  534.     cmp tast_tab,x    ; TW mit Taste aus Ber. vergleichen
  535.     bne loop    ; nächste Taste testen
  536.  
  537.     ; Tastennr. testen
  538.     ; ----------------
  539.     pha        ; TW retten
  540.     tya        ; Tastennr. laden
  541.     cmp #$ff    ; Tastennr. ebenfalls testen ?
  542.     beq found_key    ; nein, Taste gefunden (SEC), Offset in X
  543.  
  544.     cmp tast_tab+1,x    ; Tastennr. auch gleich ?
  545.     beq found_key    ; TW ist gleich (SEC), Offset in X
  546.  
  547.     pla        ; TW zurück
  548.     bra loop    ; nein, nächsten Tastenwert testen
  549.  
  550.  
  551. no_key    clc        ; Taste nicht gefunden
  552.     rts
  553.  
  554. found_key    pla        ; TW zurück
  555.     rts
  556.     bend
  557.  
  558.  
  559.  
  560. ; --------------------------------------------------------------------------
  561.  
  562. HLP    set    *
  563. _TAST_AUSW    equ    HLP-MODUL_START        ; Größe des Moduls
  564.  
  565.