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

  1. ;**************************************************************************
  2. ;
  3. ; Filename : LEITUNG.ASM
  4. ; ----------------------
  5. ;
  6. ; (c) 1990 by Thomas Lehmann
  7. ;
  8. ;
  9. ; Jackophone V5.00
  10. ;
  11. ;
  12. ; Leitungs Funktionen
  13. ;
  14. ;
  15. ;**************************************************************************
  16.  
  17. MODUL_START    set    *    ; Größe des Moduls berechnen
  18.  
  19. ; =========================================================================
  20. ;
  21. ; Type    : Hauptprg.
  22. ;
  23. ; Eingang    : bei Leitungstaste oder Leitungsbelegung durch andere Routinen
  24. ;    : Tastenwert in "tw"
  25. ;
  26. ; Ausgang    : Leitung belegt
  27. ;
  28. ; Register    : Accu
  29. ;
  30. ; (c) by Thomas Lehmann März 1990
  31. ;
  32. ; =========================================================================
  33.  
  34. key_ltg    bbs LTG_DURCH,ltg_stat,set_gspr    ; nur Gesprächsd. zurücksetzen
  35.     bbs LTG_MARK,ltg_stat,key_ltg_end    ; Ltg. ist bereits makiert
  36.                         ; Routine nicht mehrmals bei
  37.                         ; WW, Merker oder Comfortwahl
  38.                         ; aufrufen
  39.  
  40.     ; Leitung zur Belegung makieren
  41.     ; -----------------------------
  42. key_ltgbel    smb LTG_MARK,ltg_stat    ; Leitungsbelegung markieren
  43.     phy            ; Register retten
  44.     ldy #LD_L|LD_R|LD_ON    ; LED Status laden
  45.     lda #KEY_LTG        ; Tastenwert für Leitung laden
  46.     jsr set_prgled        ; und beide LED`s einschalten
  47.  
  48.     bbs ST_GU,feap_stat,key_ltg_1    ; GU ist ausgehangen
  49.  
  50.     smb ST_FSLH,feap_stat    ; Freisprech-Relais einschalten
  51.  
  52. key_ltg_1    ply            ; Register zurück
  53.  
  54.  
  55.     ; Gesprächsdauer zurücksetzten
  56.     ; ----------------------------
  57. set_gspr    jsr key_ende    ; Ende Speichern/Kontrolle ...
  58.     lda whl_zcnt    ; Anzahl gewählte Ziffern
  59.     bne gspr_clr    ; Ltg. bereits bewählt
  60.  
  61.     stz geb_cnt    ; Anzahl Gebührenimpulse löschen
  62.     stz geb_cnt+1
  63.  
  64. gspr_clr    bbs LTG_HLT,ltg_stat,key_ltg_end    ; Leitung nur neu belegen
  65.     bbr DIP_GEB,dip_stat,key_ltg_end    ; Gebührenauswertung inst.
  66.  
  67.     stz gesprd    ; Gesprächsdauer auf NULL setzen
  68.     stz gesprd+1
  69. key_ltg_end    rts
  70.  
  71.  
  72. ; =========================================================================
  73. ;
  74. ; Funktion    : testen ob Anforderung auf Ltg. Belegung besteht
  75. ;    : Routine wird zyklisch von Hauptprg.-Schleife aufgerufen
  76. ;
  77. ;    : Leitung belegt wenn Anforderung bestand und der
  78. ;    : Wiederbelegungstimer abgelaufen ist
  79. ;
  80. ; Eingang    : -------
  81. ;
  82. ; Ausgang    : -------
  83. ;
  84. ; Register    : Accu
  85. ;
  86. ; (c) by Thomas Lehmann März 1990
  87. ;
  88. ; =========================================================================
  89.  
  90. ltg_bel
  91.     block
  92.     bbr LTG_MARK,ltg_stat,end    ; keine Anforderung, Ende
  93.  
  94.     lda struct_tim+BEL_TIM_O    ; ist Wiederbelg. Timer abgelaufen ?
  95.     bne end            ; nein, Leitung noch nicht belegen
  96.  
  97.     ; Leitungs-Relais schalten
  98.     ; ------------------------
  99.     jsr nsa_off        ; NSA-Relais abschalten
  100.     jsr nsi_on        ; NSI-Relais einschalten
  101.     jsr ha_off        ; Leitung aus Halten holen
  102.     jsr ab_on        ; a/b durchschalten
  103.     jsr beantw_off        ; Anrufbeantworter abschalten
  104.     jsr post_off        ; Postapp. abschalten
  105.     jsr mod_off        ; Modem abschalten
  106.  
  107.     stz ltg_stat        ; Ltg. nicht mehr belegt, Wahlende usw.
  108.     smb LTG_BEL,ltg_stat    ; Leitung belegt eintragen
  109.     smb LTG_DURCH,ltg_stat    ; Leitung bis zum Hörer durchgeschaltet
  110.     rmb ST_SU,su_stat        ; Summer ausschalten
  111.  
  112.     bbs ST_ANRLED,su_stat,bel_1    ; Abfrage eines Anrufs
  113.  
  114.     ; Ltg. für Wahl vorbereiten
  115.     ; -------------------------
  116.     jsr hton_on    ; Hörtonauswertung einschalten
  117.     bbr ST_BABY,no_ini_flag,bel_1    ; normale Ltg. Belegung
  118.  
  119.     stz whl_zcnt    ; keine Wahlziffern im Buffer
  120.     jsr put_baby_nr    ; Babyruf auto Wahl ausführen
  121.  
  122. bel_1    inc struct_stat+STAT_GSPR    ; Dummy Funktion, Anzahl Gespräche+1
  123. end    rts
  124.     bend
  125.  
  126.  
  127. ; =========================================================================
  128. ;
  129. ; Type    : Hauptprg.
  130. ;
  131. ; Eingang    : bei Trennentaste
  132. ;    : Offset auf Tastaturtabelle in X-Reg.
  133. ;    : Tastenwert in "tw"
  134. ;
  135. ; Ausgang    :
  136. ;
  137. ; Register    :
  138. ;
  139. ; (c) by Thomas Lehmann März 1990
  140. ;
  141. ; =========================================================================
  142.  
  143. key_trenn
  144.     block
  145.     lda ltg_stat    ; ist Ltg. trennbar ?
  146.     beq end        ; nein, nicht belegt, Ende
  147.  
  148.     ; Ltg. Status eintragen
  149.     ; ---------------------
  150.     stz hgeb_stat    ; Status Hörton und Gebühren clr
  151.     stz ltg_stat    ; Leitung getrennt eintragen
  152.     stz wahl_po    ; Pointer auf 1.Zeichen im Wahlbuffer setzen
  153.     stz whl_cu_po    ; Wahlablauf Cursor erst bei Wahl setzen
  154.  
  155.     ; Ltg.-Relais in Ruhezustand bringen
  156.     ; ----------------------------------
  157.      jsr nsi_off    ; NSI-Relais abschalten
  158.     jsr nsa_off    ; NSA-Relais abschalten
  159.     jsr mod_off    ; Modem abschalten
  160.     jsr ab_off    ; a/b abschalten
  161.     jsr ha_off    ; Halten Relais abschalten
  162.     jsr htport_off    ; Hörton Port löschen
  163.     jsr set_postbea    ; Post und Beantworter-Relais + LED zurück
  164.  
  165.     ; Wiederbelegungs Timer aufziehen
  166.     ; -------------------------------
  167.     lda #BEL_TIM    ; Timerwert für Wiederbelegung laden
  168.     sta struct_tim+BEL_TIM_O    ; und Timer starten
  169.  
  170.     ; sonstige Funktionen in Ruhezustand bringen
  171.     ; ------------------------------------------
  172.     ldy #LD_L|LD_R|LD_OFF    ; LED Status laden
  173.     lda #KEY_LTG    ; Tastenwert für Leitung laden
  174.     jsr set_prgled    ; und beide LED`s ausschalten
  175.     rmb ST_FSLH,feap_stat    ; Freisprechen ausschalten
  176.  
  177.     ; Gesamt Gebühren nachführen
  178.     ; --------------------------
  179.     lda whl_zcnt    ; Anzahl gewählte Ziffern
  180.     beq trenn_1    ; abgefragtes Gespräch, keine Gebühren
  181.  
  182.     jsr geb_stat    ; Daten eintragen
  183.  
  184. trenn_1    stz whl_zcnt    ; keine Ziffer gewählt eintragen
  185.     lda modus    ; Speichern, Kontr, ... aktiv ?
  186.     bne end        ; ja, Modus beibehalten
  187.  
  188.     jsr zwsp_off    ; 2.Speicher ausschalten
  189.     stz displ_prg    ; Display Reset
  190. end    rts
  191.     bend
  192.  
  193.  
  194. ; =========================================================================
  195. ;
  196. ; Type    : Hauptprg.
  197. ;
  198. ; Eingang    : bei Haltentaste
  199. ;    : Offset auf Tastaturtabelle in X-Reg.
  200. ;    : Tastenwert in "tw"
  201. ;
  202. ; Ausgang    : Leitung in Halten gelegt
  203. ;    : LED`s eingeschaltet
  204. ;
  205. ; Register    : Accu, Y
  206. ;
  207. ; (c) by Thomas Lehmann März 1990
  208. ;
  209. ; =========================================================================
  210.  
  211. key_halten
  212.     block
  213.     bbs LTG_DURCH,ltg_stat,halt    ; Halten Status setzen
  214.  
  215.     rts        ; keine Ltg. belegt, Ende
  216.  
  217. halt    stz ltg_stat    ; Ltg. nicht mehr belegt, Wahlende usw.
  218.     smb LTG_HLT,ltg_stat    ; Leitung in Halten eintragen
  219.     smb LTG_BEL,ltg_stat    ; Leitung immer noch belegt
  220.  
  221.     jsr ha_on    ; Halten-Relais einschalten
  222.     jsr ab_off    ; a/b abschalten
  223.     jsr nsa_off    ; NSA-Relais abschalten
  224.     jsr set_zweit    ; Zweitapp. ggf. wieder einschalten
  225.  
  226.     ldy #LD_L|LD_S    ; LED Status laden
  227.     lda #KEY_LTG    ; Tastenwert für Leitung laden
  228.     jmp set_prgled    ; und LED schalten
  229.     bend
  230.  
  231.  
  232. ; =========================================================================
  233. ;
  234. ; Funktion    : Wahlwiederholung
  235. ;
  236. ; Eingang    : bei WW-Taste
  237. ;    : Offset auf Tastaturtabelle in X-Reg.
  238. ;    : Tastenwert in "tw"
  239. ;
  240. ; Ausgang    : die Ltg. wird getrennt, und die letzte gewählte Rufnr. wird
  241. ;    : erneut gewählt
  242. ;
  243. ; Register    : Accu, X, Y
  244. ;
  245. ; (c) by Thomas Lehmann März 1990
  246. ;
  247. ; =========================================================================
  248.  
  249. key_ww
  250.     block
  251.     bbs LTG_BEL,ltg_stat,ww_trn    ; Ltg. ist belegt
  252.  
  253.     bbr LTG_MARK,ltg_stat,ww_get_ziff    ; Ltg. ist getrennt
  254.     smb LTG_BEL,ltg_stat    ; Trennen Prg. ausführen
  255.  
  256. ww_trn    jsr key_trenn    ; Leitung trennen
  257.  
  258. ww_get_ziff    ldx #00
  259. loop    lda wahl_buff+1,x    ; 2. Ziffer aus Wahlbuffer holen
  260.     tay        ; und Ziffer retten
  261.     lda wahl_buff,x    ; Ziffer aus Wahlbuffer holen
  262.     beq end        ; alle Ziffern kopiert
  263.  
  264.     jsr whl_ziff    ; Wahlziffer eintragen
  265.     inx        ; nächste Ziffer einstellen
  266.     tya
  267.     sta  wahl_buff,x    ; Endekennz. durch vorherige Ziffer ersetzen
  268.     bra loop    ; und kopieren
  269.  
  270. end    rts
  271.     bend
  272.  
  273.  
  274. ; =========================================================================
  275. ;
  276. ; Type    : Hauptprg.
  277. ;
  278. ; Eingang    : bei Merkertaste
  279. ;    : Offset auf Tastaturtabelle in X-Reg.
  280. ;    : Tastenwert in "tw"
  281. ;
  282. ; Ausgang    : wenn Ltg. belegt wird die gewählte Rufnr. im Merker-Buffer
  283. ;    : gespeichert.
  284. ;    : andernfalls wird die gemerkte Rufnr. gewählt
  285. ;
  286. ; Register    : Accu, X
  287. ;
  288. ; (c) by Thomas Lehmann März 1990
  289. ;
  290. ; =========================================================================
  291.  
  292. key_merker
  293.     block
  294.     bbs LTG_BEL,ltg_stat,merk_sp    ; Ltg. belegt, Rufnummer speichern
  295.  
  296.     ; Ziffern aus Merker-Buffer wählen
  297.     ; --------------------------------
  298. merk_wahl    ldx #$00
  299. loop    lda merk_buff,x    ; Ziffer aus Merker-Buffer holen
  300.     beq end        ; alle Ziffern ausgegeben
  301.  
  302.     jsr whl_ziff    ; Ziffer wählen
  303.     inx        ; nächste Ziffer einstellen
  304.     bra loop    ; und neuer Durchlauf
  305.  
  306.  
  307.     ; gewählte Ziffern im Merker-Buffer eintragen
  308.     ; -------------------------------------------
  309. merk_sp    lda wahl_buff    ; 1. gewählte Ziffer laden
  310.     beq merk_wahl    ; noch nicht gewählt, gemerkte Ziffern wählen
  311.  
  312.     ldx #$ff    ; 1. Ziffer holen
  313. loop_1    inx
  314.     lda wahl_buff,x    ; Ziffer laden
  315.     sta merk_buff,x    ; und im Merker Buffer ablegen
  316.     bne loop_1    ; noch nicht alle Ziffern kopiert
  317.  
  318. end    rts
  319.     bend
  320.  
  321.  
  322. ; =========================================================================
  323. ;
  324. ; Type    : Hauptprg.
  325. ;
  326. ; Eingang    : bei Modemtaste
  327. ;    : Offset auf Tastaturtabelle in X-Reg.
  328. ;    : Tastenwert in "tw"
  329. ;
  330. ; Ausgang    : 
  331. ;
  332. ; Register    : Accu, X, Y
  333. ;
  334. ; (c) by Thomas Lehmann März 1990
  335. ;
  336. ; =========================================================================
  337.  
  338. key_modem
  339.     block
  340.     bbs LTG_BEL,ltg_stat,mod_1    ; Ltg. ist belegt
  341.  
  342.     rts        ; Ltg. ist nicht belegt, Ende
  343.  
  344. mod_1    bbs ST_MODEM,feap_stat,mod_2    ; Modem abschalten
  345.  
  346.     smb ST_MODEM,feap_stat    ; Status eintragen
  347.     jmp mod_on    ; Modem anschalten
  348.  
  349. mod_2    rmb ST_MODEM,feap_stat    ; Status austragen
  350.     jmp mod_off    ; Modem abschalten
  351.     bend
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360. ; --------------------------------------------------------------------------
  361.  
  362. HLP    set    *
  363. _LEITUNG    equ    HLP-MODUL_START        ; Größe des Moduls
  364.  
  365.