home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
develop
/
as65
/
demo
/
s1
/
leitung.asm
< prev
next >
Wrap
Assembly Source File
|
1995-02-27
|
9KB
|
365 lines
;**************************************************************************
;
; Filename : LEITUNG.ASM
; ----------------------
;
; (c) 1990 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; Leitungs Funktionen
;
;
;**************************************************************************
MODUL_START set * ; Größe des Moduls berechnen
; =========================================================================
;
; Type : Hauptprg.
;
; Eingang : bei Leitungstaste oder Leitungsbelegung durch andere Routinen
; : Tastenwert in "tw"
;
; Ausgang : Leitung belegt
;
; Register : Accu
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================
key_ltg bbs LTG_DURCH,ltg_stat,set_gspr ; nur Gesprächsd. zurücksetzen
bbs LTG_MARK,ltg_stat,key_ltg_end ; Ltg. ist bereits makiert
; Routine nicht mehrmals bei
; WW, Merker oder Comfortwahl
; aufrufen
; Leitung zur Belegung makieren
; -----------------------------
key_ltgbel smb LTG_MARK,ltg_stat ; Leitungsbelegung markieren
phy ; Register retten
ldy #LD_L|LD_R|LD_ON ; LED Status laden
lda #KEY_LTG ; Tastenwert für Leitung laden
jsr set_prgled ; und beide LED`s einschalten
bbs ST_GU,feap_stat,key_ltg_1 ; GU ist ausgehangen
smb ST_FSLH,feap_stat ; Freisprech-Relais einschalten
key_ltg_1 ply ; Register zurück
; Gesprächsdauer zurücksetzten
; ----------------------------
set_gspr jsr key_ende ; Ende Speichern/Kontrolle ...
lda whl_zcnt ; Anzahl gewählte Ziffern
bne gspr_clr ; Ltg. bereits bewählt
stz geb_cnt ; Anzahl Gebührenimpulse löschen
stz geb_cnt+1
gspr_clr bbs LTG_HLT,ltg_stat,key_ltg_end ; Leitung nur neu belegen
bbr DIP_GEB,dip_stat,key_ltg_end ; Gebührenauswertung inst.
stz gesprd ; Gesprächsdauer auf NULL setzen
stz gesprd+1
key_ltg_end rts
; =========================================================================
;
; Funktion : testen ob Anforderung auf Ltg. Belegung besteht
; : Routine wird zyklisch von Hauptprg.-Schleife aufgerufen
;
; : Leitung belegt wenn Anforderung bestand und der
; : Wiederbelegungstimer abgelaufen ist
;
; Eingang : -------
;
; Ausgang : -------
;
; Register : Accu
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================
ltg_bel
block
bbr LTG_MARK,ltg_stat,end ; keine Anforderung, Ende
lda struct_tim+BEL_TIM_O ; ist Wiederbelg. Timer abgelaufen ?
bne end ; nein, Leitung noch nicht belegen
; Leitungs-Relais schalten
; ------------------------
jsr nsa_off ; NSA-Relais abschalten
jsr nsi_on ; NSI-Relais einschalten
jsr ha_off ; Leitung aus Halten holen
jsr ab_on ; a/b durchschalten
jsr beantw_off ; Anrufbeantworter abschalten
jsr post_off ; Postapp. abschalten
jsr mod_off ; Modem abschalten
stz ltg_stat ; Ltg. nicht mehr belegt, Wahlende usw.
smb LTG_BEL,ltg_stat ; Leitung belegt eintragen
smb LTG_DURCH,ltg_stat ; Leitung bis zum Hörer durchgeschaltet
rmb ST_SU,su_stat ; Summer ausschalten
bbs ST_ANRLED,su_stat,bel_1 ; Abfrage eines Anrufs
; Ltg. für Wahl vorbereiten
; -------------------------
jsr hton_on ; Hörtonauswertung einschalten
bbr ST_BABY,no_ini_flag,bel_1 ; normale Ltg. Belegung
stz whl_zcnt ; keine Wahlziffern im Buffer
jsr put_baby_nr ; Babyruf auto Wahl ausführen
bel_1 inc struct_stat+STAT_GSPR ; Dummy Funktion, Anzahl Gespräche+1
end rts
bend
; =========================================================================
;
; Type : Hauptprg.
;
; Eingang : bei Trennentaste
; : Offset auf Tastaturtabelle in X-Reg.
; : Tastenwert in "tw"
;
; Ausgang :
;
; Register :
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================
key_trenn
block
lda ltg_stat ; ist Ltg. trennbar ?
beq end ; nein, nicht belegt, Ende
; Ltg. Status eintragen
; ---------------------
stz hgeb_stat ; Status Hörton und Gebühren clr
stz ltg_stat ; Leitung getrennt eintragen
stz wahl_po ; Pointer auf 1.Zeichen im Wahlbuffer setzen
stz whl_cu_po ; Wahlablauf Cursor erst bei Wahl setzen
; Ltg.-Relais in Ruhezustand bringen
; ----------------------------------
jsr nsi_off ; NSI-Relais abschalten
jsr nsa_off ; NSA-Relais abschalten
jsr mod_off ; Modem abschalten
jsr ab_off ; a/b abschalten
jsr ha_off ; Halten Relais abschalten
jsr htport_off ; Hörton Port löschen
jsr set_postbea ; Post und Beantworter-Relais + LED zurück
; Wiederbelegungs Timer aufziehen
; -------------------------------
lda #BEL_TIM ; Timerwert für Wiederbelegung laden
sta struct_tim+BEL_TIM_O ; und Timer starten
; sonstige Funktionen in Ruhezustand bringen
; ------------------------------------------
ldy #LD_L|LD_R|LD_OFF ; LED Status laden
lda #KEY_LTG ; Tastenwert für Leitung laden
jsr set_prgled ; und beide LED`s ausschalten
rmb ST_FSLH,feap_stat ; Freisprechen ausschalten
; Gesamt Gebühren nachführen
; --------------------------
lda whl_zcnt ; Anzahl gewählte Ziffern
beq trenn_1 ; abgefragtes Gespräch, keine Gebühren
jsr geb_stat ; Daten eintragen
trenn_1 stz whl_zcnt ; keine Ziffer gewählt eintragen
lda modus ; Speichern, Kontr, ... aktiv ?
bne end ; ja, Modus beibehalten
jsr zwsp_off ; 2.Speicher ausschalten
stz displ_prg ; Display Reset
end rts
bend
; =========================================================================
;
; Type : Hauptprg.
;
; Eingang : bei Haltentaste
; : Offset auf Tastaturtabelle in X-Reg.
; : Tastenwert in "tw"
;
; Ausgang : Leitung in Halten gelegt
; : LED`s eingeschaltet
;
; Register : Accu, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================
key_halten
block
bbs LTG_DURCH,ltg_stat,halt ; Halten Status setzen
rts ; keine Ltg. belegt, Ende
halt stz ltg_stat ; Ltg. nicht mehr belegt, Wahlende usw.
smb LTG_HLT,ltg_stat ; Leitung in Halten eintragen
smb LTG_BEL,ltg_stat ; Leitung immer noch belegt
jsr ha_on ; Halten-Relais einschalten
jsr ab_off ; a/b abschalten
jsr nsa_off ; NSA-Relais abschalten
jsr set_zweit ; Zweitapp. ggf. wieder einschalten
ldy #LD_L|LD_S ; LED Status laden
lda #KEY_LTG ; Tastenwert für Leitung laden
jmp set_prgled ; und LED schalten
bend
; =========================================================================
;
; Funktion : Wahlwiederholung
;
; Eingang : bei WW-Taste
; : Offset auf Tastaturtabelle in X-Reg.
; : Tastenwert in "tw"
;
; Ausgang : die Ltg. wird getrennt, und die letzte gewählte Rufnr. wird
; : erneut gewählt
;
; Register : Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================
key_ww
block
bbs LTG_BEL,ltg_stat,ww_trn ; Ltg. ist belegt
bbr LTG_MARK,ltg_stat,ww_get_ziff ; Ltg. ist getrennt
smb LTG_BEL,ltg_stat ; Trennen Prg. ausführen
ww_trn jsr key_trenn ; Leitung trennen
ww_get_ziff ldx #00
loop lda wahl_buff+1,x ; 2. Ziffer aus Wahlbuffer holen
tay ; und Ziffer retten
lda wahl_buff,x ; Ziffer aus Wahlbuffer holen
beq end ; alle Ziffern kopiert
jsr whl_ziff ; Wahlziffer eintragen
inx ; nächste Ziffer einstellen
tya
sta wahl_buff,x ; Endekennz. durch vorherige Ziffer ersetzen
bra loop ; und kopieren
end rts
bend
; =========================================================================
;
; Type : Hauptprg.
;
; Eingang : bei Merkertaste
; : Offset auf Tastaturtabelle in X-Reg.
; : Tastenwert in "tw"
;
; Ausgang : wenn Ltg. belegt wird die gewählte Rufnr. im Merker-Buffer
; : gespeichert.
; : andernfalls wird die gemerkte Rufnr. gewählt
;
; Register : Accu, X
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================
key_merker
block
bbs LTG_BEL,ltg_stat,merk_sp ; Ltg. belegt, Rufnummer speichern
; Ziffern aus Merker-Buffer wählen
; --------------------------------
merk_wahl ldx #$00
loop lda merk_buff,x ; Ziffer aus Merker-Buffer holen
beq end ; alle Ziffern ausgegeben
jsr whl_ziff ; Ziffer wählen
inx ; nächste Ziffer einstellen
bra loop ; und neuer Durchlauf
; gewählte Ziffern im Merker-Buffer eintragen
; -------------------------------------------
merk_sp lda wahl_buff ; 1. gewählte Ziffer laden
beq merk_wahl ; noch nicht gewählt, gemerkte Ziffern wählen
ldx #$ff ; 1. Ziffer holen
loop_1 inx
lda wahl_buff,x ; Ziffer laden
sta merk_buff,x ; und im Merker Buffer ablegen
bne loop_1 ; noch nicht alle Ziffern kopiert
end rts
bend
; =========================================================================
;
; Type : Hauptprg.
;
; Eingang : bei Modemtaste
; : Offset auf Tastaturtabelle in X-Reg.
; : Tastenwert in "tw"
;
; Ausgang :
;
; Register : Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================
key_modem
block
bbs LTG_BEL,ltg_stat,mod_1 ; Ltg. ist belegt
rts ; Ltg. ist nicht belegt, Ende
mod_1 bbs ST_MODEM,feap_stat,mod_2 ; Modem abschalten
smb ST_MODEM,feap_stat ; Status eintragen
jmp mod_on ; Modem anschalten
mod_2 rmb ST_MODEM,feap_stat ; Status austragen
jmp mod_off ; Modem abschalten
bend
; --------------------------------------------------------------------------
HLP set *
_LEITUNG equ HLP-MODUL_START ; Größe des Moduls