home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
develop
/
as65
/
demo
/
s1
/
gebuehren.asm
< prev
next >
Wrap
Assembly Source File
|
1995-02-27
|
7KB
|
285 lines
;**************************************************************************
;
; Filename : GEBUEHREN.ASM
; ------------------------
;
; (c) 1991 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; Gebühren bzw. Gesprächsdauer Anzeige
;
;
;**************************************************************************
MODUL_START set * ; Größe des Moduls berechnen
; =========================================================================
;
; Funktion : Gebühren bzw. Gesprächsdauer nachführen
;
; Eingang : zyklisch von Hauptprg. Schleife
;
; Ausgang : ------
;
; Register : Accu
;
; (c) by Thomas Lehmann Mai 1990
;
; =========================================================================
inc_geb bbr GEB_OUT,hgeb_stat,inc_geb_end ; Anzeige ausgeschaltet
bbs DIP_GEB,dip_stat,inc_gspr_tim ; keine Gebührenauswertung
; ==================
; Gebühren errechnen
; ==================
bbr GEB_IMP,hgeb_stat,inc_geb_end ; keine Gebühren erkannt
sei
rmb GEB_IMP,hgeb_stat ; und neu auswerten
cli
ldx geb_cnt ; Anzahl erkannter Gebührenimpulse low
lda geb_cnt+1 ; dito high
jsr calc_geb_dm ; in DM umrechnen, DM:Accu, X, Pf.:Y
stx gesprd+1 ; DM Betrag low
sty gesprd ; Pfennige
rts
; =========================
; Gesprächsdauer nachführen
; =========================
inc_gspr_tim lda uhr_buff+SEK ; aktuelle Sekunde laden
cmp gesprd_sek ; ist Sekunde vorbei ?
beq inc_geb_end ; nein, noch gleich, Ende
sta gesprd_sek ; Sekunde eintragen
lda gesprd ; Gesprächsdauer Sekunde laden
inc a ; Sekunde nachführen
cmp #60 ; Überlauf ?
bcc inc_gspr_1 ; nein
lda #00 ; Sekunde Null laden
inc gesprd+1 ; Gesprächsdauer Minute nachführen
inc_gspr_1 sta gesprd ; Gesprächsdauer low Byte nachführen
inc_geb_end rts
; =========================================================================
;
; Funktion : Gesprächsdauer bzw. Gebühren ausgeben
;
; Eingang : von Routine "Wahlablauf-Cursor aus"
;
; Ausgang : -------
;
; Register : Accu, X
;
; (c) by Thomas Lehmann Mai 1990
;
; =========================================================================
put_gesprd
block
bbr GEB_OUT,hgeb_stat,gesprd_end ; Anzeige ausgeschaltet
bbs ST_BABY,no_ini_flag,gesprd_end ; Babyruf aktiv
lda #18 ; Cursorposition laden
jsr curs_set ; Cursor setzen
jsr space ; Trennung zwischen Rufnr. und Anzeige
lda gesprd+1 ; high Byte der Gesprächsdauer/Gebühren
jsr putdez99 ; und 2-stellig ausgeben
lda #":" ; Trennzeichen für Gesprächsdauer
bbs DIP_GEB,dip_stat,gesprd_1 ; keine Gebührenauswertung
lda #"." ; Trennzeichen für Gebühren
gesprd_1 jsr putchar ; und ausgeben
lda gesprd ; low Byte der Gesprächsdauer/Gebühren
jmp putdez99 ; und 2-stellig ausgeben
gesprd_end rts
bend
; =========================================================================
;
; Funktion : DM Betrag für Gebühreneinheiten * Faktor berrechnen
;
; Eingang : Anzahl Gebühreneinheiten MSB Accu, LSB X
;
; Ausgang : DM Betrag MSB Accu, LSB X, Pfennige in Y
;
; Register : Accu, X, Y
;
; (c) by Thomas Lehmann Oktober 1991
;
; =========================================================================
calc_geb_dm ldy #100
jsr div16_8 ; Einheiten / 100 == Betrag in DM, Rest in Y
phy ; restliche Einheiten, max. 99 retten
; DM Betrag für Einheiten ohne Rest berrechnen
; --------------------------------------------
ldy geb_fakt ; Gebührenfaktor laden, Multiplikant
jsr mul16_8 ; Wert in DM, (ACCU, X) * Y = (Accu, X)
sta hlp_reg ; DM Betrag retten
stx hlp_reg+1
; Rest Betrag für Einheiten in Pf. berrechnen
; -------------------------------------------
lda #$00 ; high
plx ; Restliche Einheiten
jsr mul16_8 ; Wert in Pfennigen, (ACCU, X) * Y = (Accu, X)
; Rest Betrag in DM umrechnen
; ---------------------------
ldy #100
jsr div16_8 ; rest. Einh. / 100 == Betrag in DM, Pf. in Y
phy ; Pfennige retten
; beide DM Beträge addieren
; -------------------------
ldy hlp_reg+1 ; low Byte des DM Betrags
jsr add16_16 ; Betrag + Rest DM (ACCU und X) + hlp_reg und Y
ply ; Pfennige holen
rts
; =========================================================================
;
; Funktion : Gebührenfaktor speichern
;
; Eingang : Auswahl bei Speichern
;
; Ausgang : Wähltastatur auf Faktoreingabe umgeleitet
;
; Register : X
;
; (c) by Thomas Lehmann Mai 1991
;
; =========================================================================
sp_gebfakt ldx #WTA_SPGEB ; Prg. Nr. für Wähltaste laden
stx wta_prg ; und bei Wähltaste ausführen
lda geb_fakt ; aktuellen Gebührenfaktor laden
bra geb_out ; aktuellen Gebührenfaktor ausgeben
; =========================================================================
;
; Funktion : Gebührenfaktor eingeben
;
; Eingang : bei Wähltaste und eingeschaltetem Gebührenfaktor Modus
; : Tastenwert (1 bis ...) im Accu
;
; Ausgang : --------
;
; Register : Accu
;
; (c) by Thomas Lehmann Mai 1991
;
; =========================================================================
wta_spgeb jsr check_wta ; Taste im Gültigkeitsbereich ?
bcs wta_spgeb_e ; nein, Ende
jsr input ; Wert eintragen
ldx input_po ; Offset auf akt. Eingabe
cpx #2 ; Wert komplett eingegeben ?
bcc wta_spgeb_e ; nein
ldx #00 ; 2-stellige Eingabe holen (ACCU)
jsr get_input
sta geb_fakt ; Gebührenfaktor eintragen
; Gebühren Text ausgeben
; ----------------------
geb_out stz input_po ; Offset auf akt. Eingabe
ldx #<geb_txt ; Text ausgeben
ldy #>geb_txt
jsr puttxt
jsr putdez99 ; Gebührenfaktor dezimal ausgeben
jmp space
wta_spgeb_e rts
geb_txt byte DSP_CLR|CURS_ON
shift "Gebuehrenfaktor: "
; =========================================================================
;
; Funktion : angefallene Gesprächsgebühren eintragen
; nach Trennen des Gesprächs
;
; Eingang : ------
;
; Ausgang : --------
;
; Register : Accu, X, Y
;
; (c) by Thomas Lehmann Oktober 1991
;
; =========================================================================
geb_stat ldx geb_cnt ; Anzahl Gebührenimpulse des Gesprächs laden
lda geb_cnt+1
phx ; zur weiteren Addition retten
pha
; Gesamt Gebührenimpulse eintragen
; --------------------------------
ldy struct_stat+STAT_GEB+1 ; Gesamt Gebühren high
sty hlp_reg ; für add eintragen
ldy struct_stat+STAT_GEB ; Gesamt Gebühren low
jsr add16_16 ; (ACCU und X) + (hlp_reg und Y)
sta struct_stat+STAT_GEB+1 ; Gesamt Gebühren high
stx struct_stat+STAT_GEB ; Gesamt Gebühren low
; Monats Gebührenimpulse eintragen
; --------------------------------
ldx uhr_buff+MON ; aktuellen Monat laden (1-12)
dex
ldy struct_stat+STAT_GEB+1,x ; Monats Gebühren high
sty hlp_reg ; für add eintragen
ldy struct_stat+STAT_GEB,x ; Monats Gebühren low
pla ; Anzahl Gesprächs-Gebührenimpulse
plx
jsr add16_16 ; (ACCU und X) + (hlp_reg und Y)
ldy uhr_buff+MON ; aktuellen Monat laden
sta struct_stat+STAT_GEB+1,y ; Monats Gebühren high
txa
sta struct_stat+STAT_GEB,y ; Monats Gebühren low
rts
; --------------------------------------------------------------------------
HLP set *
_GEBUEHREN equ HLP-MODUL_START ; Größe des Moduls