home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
develop
/
as65
/
demo
/
s1
/
wahl.asm
< prev
next >
Wrap
Assembly Source File
|
1995-02-27
|
8KB
|
310 lines
;**************************************************************************
;
; Filename : WAHL.ASM
; -------------------
;
; (c) 1990/91 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; Wahlprogramm
;
;
;**************************************************************************
MODUL_START set * ; Größe des Moduls berechnen
; =========================================================================
;
; Type : Hauptprg.
;
; Eingang : bei Wähltaste
; : Tastenwert im Accu
;
; Ausgang : Wähltaste in Wahlbuffer legen
; : Passwort für BTA testen und wenn korrekt BTA-Modus einschalten
;
; Register : Accu, X
;
; (c) by Thomas Lehmann Feb. 1990
;
; =========================================================================
passwort byte 2,5,8,10,11,0 ; BTA Passwort : "*", "2", "5", "8", "0", "#"
; ================
; BTA-Modus testen
; ================
wta_wahl bbs LTG_BEL,ltg_stat,whl_ziff ; Ltg. ist belegt, Ziffer wählen
ldx passw_offs ; ist BTA-Modus vorbereitet
beq wta_whl_1 ; nein, BTA einleiten ?
bbr SS_STAT,allg_stat,wta_whl_2 ; SS ist ausgeschaltet, kein BTA
dex ; Offset auf Tabelle
cmp passwort,x ; stimmt Zeichen mit Passwort überein ?
bne wta_whl_2 ; nein, BTA nicht mehr vorbereitet
inc passw_offs ; nächstes Zeichen im Passwort einstellen
lda passwort+1,x ; komplettes Passwort eingegeben ?
bne wta_whl_end ; nein, Ende
jmp bta ; BTA-Menu einschalten
wta_whl_2 stz passw_offs ; BTA-Modus neu starten
wta_whl_1 cmp #BTA_START ; soll BTA eingeleitet werden ?
bne whl_ziff ; nein, Wahlziffer eintragen
inc passw_offs
wta_whl_end rts
; =========================================================================
;
; Funktion : Wahlziffern in Wahlbuffer eintragen, Wahl starten
; : Comfortanschaltung
;
; Eingang : Wahlziffer im Accu
;
; Ausgang : -------
;
; Register : ------
;
; (c) by Thomas Lehmann Feb. 1990
;
; =========================================================================
whl_ziff
block
phx ; Register retten
ldx whl_zcnt ; Anzahl Wahlziffern laden
cpx #MAX_WHL_ZIFF ; max. Anzahl der Wahlziffern erreicht ?
bcc whl_ziff_1 ; nein, Ziffer in Wahlbuffer eintragen
; einzelne Ziffern können noch gewählt werden
; -------------------------------------------
cpx wahl_po ; sind noch Ziffern zu wählen ?
bne end ; ja, erst Ende der Wahl abwarten, Ende
bbs LTG_WHL,ltg_stat,end ; Wahl läuft, Ziffer zu Ende wählen
dex ; letzte Ziffer in Wahlbuffer überschreiben
sei
dec whl_zcnt ; Anzahl Wahlziffern bleibt gleich
dec wahl_po ; einzelne Wahl-Ziffer zulassen
cli
; Wahl Buffer füllen
; ------------------
whl_ziff_1 sta wahl_buff,x ; Ziffer in Wahl-Buffer eintragen
stz wahl_buff+1,x ; letzte Ziffer kennzeichnen
bbs SS_STAT,allg_stat,whlz_ok ; SS ist eingeschaltet, Wahl OK
jsr notruf_chk ; Notruf testen
stz wahl_buff,x ; letzte Ziffer erstmal löschen
bcc end ; Ziffer nicht zugelassen
whlz_ok sta wahl_buff,x ; Ziffer in Wahl-Buffer eintragen
rmb WHL_START,hgeb_stat ; Wahl noch nicht gestartet
rmb GEB_OUT,hgeb_stat ; Gebührenanzeige ausschalten
bbs LTG_DURCH,ltg_stat,ziff_cnt ; Ltg. ist belegt
jsr key_ltg ; Leitung belegen (Comfort, aus Halten)
ziff_cnt sei
inc whl_zcnt ; Anzahl Wahlziffern nachführen
end jsr key_ende ; Display Prg. für Wahl einschalten
cli
plx ; Register zurück
rts
bend
; =========================================================================
;
; Funktion : Wahlziffern im Display anzeigen
;
; Eingang : ---------
;
; Ausgang : ---------
;
; Register : Accu, Y
;
; (c) by Thomas Lehmann Oktober 1991
;
; =========================================================================
whl_displ
block
ldy #00 ; Offset auf Wahlziffer laden
loop lda wahl_buff,y ; Ziffer aus Buffer holen
beq end ; alle Ziffern ausgegeben, Ende
dec whl_cu_po ; Wahlablauf Cursor neu setzen
jsr wta_displ ; Ziffer im Display anzeigen
iny
bra loop ; nächste Ziffer ausgeben
end bbr ST_BABY,no_ini_flag,end_1 ; Babyruf nicht aktiv
jmp put_babyruf ; "Baybyruf" ausgeben
end_1 rts
bend
; =========================================================================
;
; Type : Interrupprg.
; : Ziffern wählen
;
; Eingang : alle 10mS
;
; Ausgang : die im Wahlbuffer eingetragenen Wahlziffer(n) gewählt
;
; Register : Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================
wahl bbr LTG_DURCH,ltg_stat,wahl_end_1 ; Ltg. nicht belegt, Ende
bbs LTG_WHL,ltg_stat,ziff_whl ; Wahl läuft, Ziffer zu Ende wählen
bbs WHL_ERDE,ltg_stat,wahl_end_1 ; Erde wir gewählt
ldx wahl_po ; Wahlpointer laden
cpx whl_zcnt ; sind noch Ziffern zu wählen ?
bcs wahl_end ; alle Ziffern gewählt, Wahlende
lda wahl_buff,x ; Ziffer aus Wahlbuffer holen
inc wahl_po ; Wahlpointer auf nächste Ziffer stellen
cmp #ERD_ZIFF ; ist es Erdtaste ?
bne wahl_1 ; nein, normale Wähltaste
; Erde wählen
; -----------
jmp wahl_erde ; Erde wählen
wahl_1 bbr HTON_OK,hgeb_stat,wahl_end_1 ; auf Hörton warten
; Wahlziffer wählen
; -----------------
cmp #HTON_ZIFF ; ist Zeichen Hörtonziffer ?
bne wahl_2 ; nein
jmp hton_on ; Hörtonauswert. einschalten und auf Ton warten
wahl_2 cmp #11 ; ist Zeichen Wahlziffer ?
bcs wahl_end_1 ; nein, Ziffer nicht wählen
smb WHL_START,hgeb_stat ; Wahl wurde gestartet
sta ziffer ; Anzahl der Impulse eintragen
smb LTG_WHL,ltg_stat ; Wahl läuft eintragen
ldy #ZWWHL_TIM ; Timerwert Zwischenwahlzeit laden
cpx #00 ; ist es 1. Ziffer ?
bne wahl_tim ; nein, Zwischenwahlzeit setzen
ldy vorwahl_tim ; Timerwert Vorwahlzeit laden
wahl_tim sty struct_tim+WHL_TIM_O ; und Wahl-Timer starten
bra ziff_whl ; und Ziffer wählen
wahl_end bbr WHL_START,hgeb_stat,ziff_end ; Wahl noch nicht gestartet
smb GEB_OUT,hgeb_stat ; Gebührenanzeige einschalten, Wahlende
ziff_end rmb LTG_WHL,ltg_stat ; komplette Ziffer gewählt eintragen
ldx wahl_po ; Wahlpointer laden
cpx whl_zcnt ; sind weitere Ziffern im Wahlbuffer ?
bcc wahl_end_1 ; ja, Ende
jmp nsa_off ; Wahlende, NSA-Relais ausschalten (SPIKE)
wahl_end_1 rts
; Ziffer wählen
; -------------
ziff_whl jsr nsa_on ; NSA-Relais für Wahldauer einschalten
lda struct_tim+WHL_TIM_O ; Wahltimer abgelaufen ?
bne wahl_end_1 ; nein, Ende
lda Via_portb ; Zustand der VIA einlesen
bit #NSI ; ist NSI eingeschaltet ?
bne whl_0 ; ja, NSI ausschalten
jsr nsi_on ; Ltg. durchschalten
dec ziffer ; Anzahl der Impulse für Wahlziffer
beq ziff_end ; komplette Ziffer gewählt
lda #NSION_TIM ; Timerwert "NSI ein" laden
sta struct_tim+WHL_TIM_O ; und Wahl-Timer starten
rts
whl_0 jsr nsi_off ; NSI-Relais für 40mS abfallen lassen
lda #NSIOFF_TIM ; Timerwert "NSI aus" laden
sta struct_tim+WHL_TIM_O ; und Wahl-Timer starten
rts
; =========================================================================
;
; Funktion : Wahlablauf Cursor zeigen
;
; Eingang : wird vom Displayprg.-Verteiler aufgerufen
;
; Ausgang : Wahlablauf Cursor auf aktuelle Ziffer gesetzt
;
; Register : Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================
whl_abl jsr st_dp_tim ; Wahlziffern werden angezeigt, Timer aufziehen
bbs WHL_ERDE,ltg_stat,whl_abl_1 ; Erde wir gewählt
bbr HTON_OK,hgeb_stat,whl_abl_1 ; auf Hörton warten, Cursor
; auf Ziffer stehen lassen
bbs LTG_WHL,ltg_stat,whl_abl_1 ; Wahl läuft, Cursor pos.
jsr curs_off ; Wahlablauf Cursor ausschalten
jmp put_gesprd ; Gesprächsdauer anzeigen
; Wahlablauf-Cursor positionieren
; -------------------------------
whl_abl_1 ldx wahl_po ; Wahlpointer auf akt. Ziffer
cpx whl_cu_po ; ist Cursor auf akt. Ziffer ?
beq whl_abl_end ; ja, nicht neu setzen
stx whl_cu_po ; Wahlablauf Cursorposition merken
dex
txa
ldy dp_bu_po ; aktuelle Cursorposition laden
jsr curs_set ; Cursor auf Wahl-Ziffer setzen
jsr curs_on ; Cursor einschalten, Cursor blinkt
sty dp_bu_po ; alte Cursorposition zurückschreiben
whl_abl_end rts
; --------------------------------------------------------------------------
HLP set *
_WAHL equ HLP-MODUL_START ; Größe des Moduls