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

  1. ;**************************************************************************
  2. ;
  3. ; Filename : WAHL.ASM
  4. ; -------------------
  5. ;
  6. ; (c) 1990/91 by Thomas Lehmann
  7. ;
  8. ;
  9. ; Jackophone V5.00
  10. ;
  11. ;
  12. ; Wahlprogramm
  13. ;
  14. ;
  15. ;**************************************************************************
  16.  
  17. MODUL_START    set    *    ; Größe des Moduls berechnen
  18.  
  19. ; =========================================================================
  20. ;
  21. ; Type    : Hauptprg.
  22. ;
  23. ; Eingang    : bei Wähltaste
  24. ;    : Tastenwert im Accu
  25. ;
  26. ; Ausgang    : Wähltaste in Wahlbuffer legen
  27. ;    : Passwort für BTA testen und wenn korrekt BTA-Modus einschalten
  28. ;
  29. ; Register    : Accu, X
  30. ;
  31. ; (c) by Thomas Lehmann Feb. 1990
  32. ;
  33. ; =========================================================================
  34.  
  35. passwort    byte 2,5,8,10,11,0    ; BTA Passwort : "*", "2", "5", "8", "0", "#"
  36.  
  37.     ; ================
  38.     ; BTA-Modus testen
  39.     ; ================
  40.  
  41. wta_wahl    bbs LTG_BEL,ltg_stat,whl_ziff    ; Ltg. ist belegt, Ziffer wählen
  42.  
  43.     ldx passw_offs    ; ist BTA-Modus vorbereitet
  44.     beq wta_whl_1    ; nein, BTA einleiten ?
  45.  
  46.     bbr SS_STAT,allg_stat,wta_whl_2    ; SS ist ausgeschaltet, kein BTA
  47.  
  48.     dex        ; Offset auf Tabelle
  49.     cmp passwort,x    ; stimmt Zeichen mit Passwort überein ?
  50.     bne wta_whl_2    ; nein, BTA nicht mehr vorbereitet
  51.  
  52.     inc passw_offs    ; nächstes Zeichen im Passwort einstellen
  53.     lda passwort+1,x    ; komplettes Passwort eingegeben ?
  54.     bne wta_whl_end    ; nein, Ende
  55.  
  56.     jmp bta        ; BTA-Menu einschalten
  57.  
  58.  
  59. wta_whl_2    stz passw_offs    ; BTA-Modus neu starten
  60.  
  61. wta_whl_1    cmp #BTA_START    ; soll BTA eingeleitet werden ?
  62.     bne whl_ziff    ; nein, Wahlziffer eintragen
  63.  
  64.     inc passw_offs
  65. wta_whl_end    rts
  66.  
  67.  
  68.  
  69. ; =========================================================================
  70. ;
  71. ; Funktion    : Wahlziffern in Wahlbuffer eintragen, Wahl starten
  72. ;    : Comfortanschaltung
  73. ;
  74. ; Eingang    : Wahlziffer im Accu
  75. ;
  76. ; Ausgang    : -------
  77. ;
  78. ; Register    : ------
  79. ;
  80. ; (c) by Thomas Lehmann Feb. 1990
  81. ;
  82. ; =========================================================================
  83.  
  84. whl_ziff
  85.     block
  86.     phx        ; Register retten
  87.     ldx whl_zcnt    ; Anzahl Wahlziffern laden
  88.     cpx #MAX_WHL_ZIFF    ; max. Anzahl der Wahlziffern erreicht ?
  89.     bcc whl_ziff_1    ; nein, Ziffer in Wahlbuffer eintragen
  90.  
  91.     ; einzelne Ziffern können noch gewählt werden
  92.     ; -------------------------------------------
  93.     cpx wahl_po    ; sind noch Ziffern zu wählen ?
  94.     bne end        ; ja, erst Ende der Wahl abwarten, Ende
  95.     bbs LTG_WHL,ltg_stat,end    ; Wahl läuft, Ziffer zu Ende wählen
  96.  
  97.     dex        ; letzte Ziffer in Wahlbuffer überschreiben
  98.     sei
  99.     dec whl_zcnt    ; Anzahl Wahlziffern bleibt gleich
  100.     dec wahl_po    ; einzelne Wahl-Ziffer zulassen
  101.     cli
  102.  
  103.     ; Wahl Buffer füllen
  104.     ; ------------------
  105. whl_ziff_1    sta wahl_buff,x    ; Ziffer in Wahl-Buffer eintragen
  106.     stz wahl_buff+1,x    ; letzte Ziffer kennzeichnen
  107.     bbs SS_STAT,allg_stat,whlz_ok    ; SS ist eingeschaltet, Wahl OK
  108.  
  109.     jsr notruf_chk    ; Notruf testen
  110.     stz wahl_buff,x    ; letzte Ziffer erstmal löschen
  111.             bcc end        ; Ziffer nicht zugelassen
  112.  
  113. whlz_ok    sta wahl_buff,x    ; Ziffer in Wahl-Buffer eintragen
  114.     rmb WHL_START,hgeb_stat    ; Wahl noch nicht gestartet
  115.     rmb GEB_OUT,hgeb_stat    ; Gebührenanzeige ausschalten
  116.     bbs LTG_DURCH,ltg_stat,ziff_cnt    ; Ltg. ist belegt
  117.  
  118.     jsr key_ltg    ; Leitung belegen (Comfort, aus Halten)
  119.  
  120. ziff_cnt    sei
  121.     inc whl_zcnt    ; Anzahl Wahlziffern nachführen
  122. end    jsr key_ende    ; Display Prg. für Wahl einschalten
  123.     cli
  124.     plx        ; Register zurück
  125.     rts
  126.  
  127.     bend
  128.  
  129.  
  130. ; =========================================================================
  131. ;
  132. ; Funktion    : Wahlziffern im Display anzeigen
  133. ;
  134. ; Eingang    : ---------
  135. ;
  136. ; Ausgang    : ---------
  137. ;
  138. ; Register    : Accu, Y
  139. ;
  140. ; (c) by Thomas Lehmann Oktober 1991
  141. ;
  142. ; =========================================================================
  143.  
  144. whl_displ
  145.     block
  146.     ldy #00        ; Offset auf Wahlziffer laden
  147. loop    lda wahl_buff,y    ; Ziffer aus Buffer holen
  148.     beq end        ; alle Ziffern ausgegeben, Ende
  149.  
  150.     dec whl_cu_po    ; Wahlablauf Cursor neu setzen
  151.     jsr wta_displ    ; Ziffer im Display anzeigen
  152.     iny
  153.     bra loop    ; nächste Ziffer ausgeben
  154.  
  155. end    bbr ST_BABY,no_ini_flag,end_1    ; Babyruf nicht aktiv
  156.  
  157.     jmp put_babyruf    ; "Baybyruf" ausgeben
  158.  
  159. end_1    rts
  160.     bend
  161.  
  162.  
  163. ; =========================================================================
  164. ;
  165. ; Type    : Interrupprg.
  166. ;    : Ziffern wählen
  167. ;
  168. ; Eingang    : alle 10mS
  169. ;
  170. ; Ausgang    : die im Wahlbuffer eingetragenen Wahlziffer(n) gewählt
  171. ;
  172. ; Register    : Accu, X, Y
  173. ;
  174. ; (c) by Thomas Lehmann März 1990
  175. ;
  176. ; =========================================================================
  177.  
  178. wahl    bbr LTG_DURCH,ltg_stat,wahl_end_1    ; Ltg. nicht belegt, Ende
  179.     bbs LTG_WHL,ltg_stat,ziff_whl    ; Wahl läuft, Ziffer zu Ende wählen
  180.     bbs WHL_ERDE,ltg_stat,wahl_end_1    ; Erde wir gewählt
  181.  
  182.     ldx wahl_po    ; Wahlpointer laden
  183.     cpx whl_zcnt    ; sind noch Ziffern zu wählen ?
  184.     bcs wahl_end    ; alle Ziffern gewählt, Wahlende
  185.  
  186.     lda wahl_buff,x    ; Ziffer aus Wahlbuffer holen
  187.     inc wahl_po    ; Wahlpointer auf nächste Ziffer stellen
  188.     cmp #ERD_ZIFF    ; ist es Erdtaste ?
  189.     bne wahl_1    ; nein, normale Wähltaste
  190.  
  191.     ; Erde wählen
  192.     ; -----------
  193.     jmp wahl_erde    ; Erde wählen
  194.  
  195.  
  196. wahl_1    bbr HTON_OK,hgeb_stat,wahl_end_1    ; auf Hörton warten
  197.  
  198.     ; Wahlziffer wählen
  199.     ; -----------------
  200.     cmp #HTON_ZIFF    ; ist Zeichen Hörtonziffer ?
  201.     bne wahl_2    ; nein
  202.  
  203.     jmp hton_on    ; Hörtonauswert. einschalten und auf Ton warten
  204.  
  205. wahl_2    cmp #11        ; ist Zeichen Wahlziffer ?
  206.     bcs wahl_end_1    ; nein, Ziffer nicht wählen
  207.  
  208.     smb WHL_START,hgeb_stat    ; Wahl wurde gestartet
  209.     sta ziffer    ; Anzahl der Impulse eintragen
  210.     smb LTG_WHL,ltg_stat    ; Wahl läuft eintragen
  211.  
  212.     ldy #ZWWHL_TIM    ; Timerwert Zwischenwahlzeit laden
  213.     cpx #00        ; ist es 1. Ziffer ?
  214.     bne wahl_tim    ; nein, Zwischenwahlzeit setzen
  215.  
  216.     ldy vorwahl_tim    ; Timerwert Vorwahlzeit laden
  217. wahl_tim    sty struct_tim+WHL_TIM_O    ; und Wahl-Timer starten
  218.     bra ziff_whl    ; und Ziffer wählen
  219.  
  220.  
  221.  
  222. wahl_end    bbr WHL_START,hgeb_stat,ziff_end    ; Wahl noch nicht gestartet
  223.  
  224.     smb GEB_OUT,hgeb_stat    ; Gebührenanzeige einschalten, Wahlende
  225. ziff_end    rmb LTG_WHL,ltg_stat    ; komplette Ziffer gewählt eintragen
  226.  
  227.     ldx wahl_po    ; Wahlpointer laden
  228.     cpx whl_zcnt    ; sind weitere Ziffern im Wahlbuffer ?
  229.     bcc wahl_end_1    ; ja, Ende
  230.  
  231.     jmp nsa_off    ; Wahlende, NSA-Relais ausschalten (SPIKE)
  232.  
  233. wahl_end_1    rts
  234.  
  235.  
  236.     ; Ziffer wählen
  237.     ; -------------
  238. ziff_whl    jsr nsa_on    ; NSA-Relais für Wahldauer einschalten
  239.     lda struct_tim+WHL_TIM_O    ; Wahltimer abgelaufen ?
  240.     bne wahl_end_1    ; nein, Ende
  241.  
  242.     lda Via_portb    ; Zustand der VIA einlesen
  243.     bit #NSI    ; ist NSI eingeschaltet ?
  244.     bne whl_0    ; ja, NSI ausschalten
  245.  
  246.     jsr nsi_on    ; Ltg. durchschalten
  247.     dec ziffer    ; Anzahl der Impulse für Wahlziffer
  248.     beq ziff_end    ; komplette Ziffer gewählt
  249.  
  250.     lda #NSION_TIM    ; Timerwert "NSI ein" laden
  251.     sta struct_tim+WHL_TIM_O    ; und Wahl-Timer starten
  252.     rts
  253.  
  254. whl_0    jsr nsi_off    ; NSI-Relais für 40mS abfallen lassen
  255.     lda #NSIOFF_TIM    ; Timerwert "NSI aus" laden
  256.     sta struct_tim+WHL_TIM_O    ; und Wahl-Timer starten
  257.     rts
  258.  
  259.  
  260.  
  261. ; =========================================================================
  262. ;
  263. ; Funktion    : Wahlablauf Cursor zeigen
  264. ;
  265. ; Eingang    : wird vom Displayprg.-Verteiler aufgerufen
  266. ;
  267. ; Ausgang    : Wahlablauf Cursor auf aktuelle Ziffer gesetzt
  268. ;
  269. ; Register    : Accu, X, Y
  270. ;
  271. ; (c) by Thomas Lehmann März 1990
  272. ;
  273. ; =========================================================================
  274.  
  275. whl_abl    jsr st_dp_tim    ; Wahlziffern werden angezeigt, Timer aufziehen
  276.     bbs WHL_ERDE,ltg_stat,whl_abl_1    ; Erde wir gewählt
  277.  
  278.     bbr HTON_OK,hgeb_stat,whl_abl_1    ; auf Hörton warten, Cursor
  279.                         ; auf Ziffer stehen lassen
  280.     bbs LTG_WHL,ltg_stat,whl_abl_1    ; Wahl läuft, Cursor pos.
  281.  
  282.     jsr curs_off    ; Wahlablauf Cursor ausschalten
  283.     jmp put_gesprd    ; Gesprächsdauer anzeigen
  284.  
  285.  
  286.     ; Wahlablauf-Cursor positionieren
  287.     ; -------------------------------
  288. whl_abl_1    ldx wahl_po    ; Wahlpointer auf akt. Ziffer
  289.     cpx whl_cu_po    ; ist Cursor auf akt. Ziffer ?
  290.     beq whl_abl_end    ; ja, nicht neu setzen
  291.  
  292.     stx whl_cu_po    ; Wahlablauf Cursorposition merken
  293.     dex
  294.     txa
  295.     ldy dp_bu_po    ; aktuelle Cursorposition laden
  296.     jsr curs_set    ; Cursor auf Wahl-Ziffer setzen
  297.     jsr curs_on    ; Cursor einschalten, Cursor blinkt
  298.     sty dp_bu_po    ; alte Cursorposition zurückschreiben
  299. whl_abl_end    rts
  300.  
  301.  
  302.  
  303.  
  304.  
  305. ; --------------------------------------------------------------------------
  306.  
  307. HLP    set    *
  308. _WAHL    equ    HLP-MODUL_START        ; Größe des Moduls
  309.  
  310.