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

  1. ;**************************************************************************
  2. ;
  3. ; Filename : GEBUEHREN.ASM
  4. ; ------------------------
  5. ;
  6. ; (c) 1991 by Thomas Lehmann
  7. ;
  8. ;
  9. ; Jackophone V5.00
  10. ;
  11. ;
  12. ; Gebühren bzw. Gesprächsdauer Anzeige
  13. ;
  14. ;
  15. ;**************************************************************************
  16.  
  17. MODUL_START    set    *    ; Größe des Moduls berechnen
  18.  
  19. ; =========================================================================
  20. ;
  21. ; Funktion    : Gebühren bzw. Gesprächsdauer nachführen
  22. ;
  23. ; Eingang    : zyklisch von Hauptprg. Schleife
  24. ;
  25. ; Ausgang    : ------
  26. ;
  27. ; Register    : Accu
  28. ;
  29. ; (c) by Thomas Lehmann Mai 1990
  30. ;
  31. ; =========================================================================
  32.  
  33. inc_geb    bbr GEB_OUT,hgeb_stat,inc_geb_end    ; Anzeige ausgeschaltet
  34.     bbs DIP_GEB,dip_stat,inc_gspr_tim    ; keine Gebührenauswertung
  35.  
  36.     ; ==================
  37.     ; Gebühren errechnen
  38.     ; ==================
  39.  
  40.     bbr GEB_IMP,hgeb_stat,inc_geb_end    ; keine Gebühren erkannt
  41.  
  42.     sei
  43.     rmb GEB_IMP,hgeb_stat    ; und neu auswerten
  44.     cli
  45.  
  46.     ldx geb_cnt    ; Anzahl erkannter Gebührenimpulse low
  47.     lda geb_cnt+1    ; dito high
  48.     jsr calc_geb_dm    ; in DM umrechnen, DM:Accu, X,  Pf.:Y
  49.     stx gesprd+1    ; DM Betrag low
  50.     sty gesprd    ; Pfennige
  51.     rts
  52.  
  53.  
  54.     ; =========================
  55.     ; Gesprächsdauer nachführen
  56.     ; =========================
  57.  
  58. inc_gspr_tim lda uhr_buff+SEK    ; aktuelle Sekunde laden
  59.     cmp gesprd_sek    ; ist Sekunde vorbei ?
  60.     beq inc_geb_end    ; nein, noch gleich, Ende
  61.  
  62.     sta gesprd_sek    ; Sekunde eintragen
  63.  
  64.     lda gesprd    ; Gesprächsdauer Sekunde laden
  65.     inc a        ; Sekunde nachführen
  66.     cmp #60        ; Überlauf ?
  67.     bcc inc_gspr_1    ; nein
  68.  
  69.     lda #00        ; Sekunde Null laden
  70.     inc gesprd+1    ; Gesprächsdauer Minute nachführen
  71. inc_gspr_1    sta gesprd    ; Gesprächsdauer low Byte nachführen
  72.  
  73. inc_geb_end    rts
  74.  
  75.  
  76.  
  77. ; =========================================================================
  78. ;
  79. ; Funktion    : Gesprächsdauer bzw. Gebühren ausgeben
  80. ;
  81. ; Eingang    : von Routine "Wahlablauf-Cursor aus"
  82. ;
  83. ; Ausgang    : -------
  84. ;
  85. ; Register    : Accu, X
  86. ;
  87. ; (c) by Thomas Lehmann Mai 1990
  88. ;
  89. ; =========================================================================
  90.  
  91. put_gesprd
  92.     block
  93.     bbr GEB_OUT,hgeb_stat,gesprd_end    ; Anzeige ausgeschaltet
  94.     bbs ST_BABY,no_ini_flag,gesprd_end    ; Babyruf aktiv
  95.  
  96.     lda #18        ; Cursorposition laden
  97.     jsr curs_set    ; Cursor setzen
  98.     jsr space    ; Trennung zwischen Rufnr. und Anzeige
  99.     lda gesprd+1    ; high Byte der Gesprächsdauer/Gebühren
  100.     jsr putdez99    ; und 2-stellig ausgeben
  101.  
  102.     lda #":"    ; Trennzeichen für Gesprächsdauer
  103.     bbs DIP_GEB,dip_stat,gesprd_1    ; keine Gebührenauswertung
  104.  
  105.     lda #"."    ; Trennzeichen für Gebühren
  106. gesprd_1    jsr putchar    ; und ausgeben
  107.     lda gesprd    ; low Byte der Gesprächsdauer/Gebühren
  108.     jmp putdez99    ; und 2-stellig ausgeben
  109.  
  110. gesprd_end    rts
  111.     bend
  112.  
  113.  
  114. ; =========================================================================
  115. ;
  116. ; Funktion    : DM Betrag für Gebühreneinheiten * Faktor berrechnen
  117. ;
  118. ; Eingang    : Anzahl Gebühreneinheiten MSB Accu, LSB X
  119. ;
  120. ; Ausgang    : DM Betrag MSB Accu, LSB X, Pfennige in Y
  121. ;
  122. ; Register    : Accu, X, Y
  123. ;
  124. ; (c) by Thomas Lehmann Oktober 1991
  125. ;
  126. ; =========================================================================
  127.  
  128. calc_geb_dm    ldy #100
  129.     jsr div16_8    ; Einheiten / 100 == Betrag in DM, Rest in Y
  130.     phy        ; restliche Einheiten, max. 99 retten
  131.  
  132.     ; DM Betrag für Einheiten ohne Rest berrechnen
  133.     ; --------------------------------------------
  134.     ldy geb_fakt    ; Gebührenfaktor laden, Multiplikant
  135.     jsr mul16_8    ; Wert in DM, (ACCU, X) * Y = (Accu, X)
  136.     sta hlp_reg    ; DM Betrag retten
  137.     stx hlp_reg+1
  138.  
  139.     ; Rest Betrag für Einheiten in Pf. berrechnen
  140.     ; -------------------------------------------
  141.     lda #$00    ; high
  142.     plx        ; Restliche Einheiten
  143.     jsr mul16_8    ; Wert in Pfennigen, (ACCU, X) * Y = (Accu, X)
  144.  
  145.     ; Rest Betrag in DM umrechnen
  146.     ; ---------------------------
  147.     ldy #100
  148.     jsr div16_8    ; rest. Einh. / 100 == Betrag in DM, Pf. in Y
  149.     phy        ; Pfennige retten
  150.  
  151.  
  152.     ; beide DM Beträge addieren
  153.     ; -------------------------
  154.     ldy hlp_reg+1    ; low Byte des DM Betrags
  155.     jsr add16_16    ; Betrag + Rest DM (ACCU und X) + hlp_reg und Y
  156.  
  157.     ply        ; Pfennige holen
  158.     rts
  159.  
  160.     
  161.  
  162. ; =========================================================================
  163. ;
  164. ; Funktion    : Gebührenfaktor speichern
  165. ;
  166. ; Eingang    : Auswahl bei Speichern
  167. ;
  168. ; Ausgang    : Wähltastatur auf Faktoreingabe umgeleitet
  169. ;
  170. ; Register    : X
  171. ;
  172. ; (c) by Thomas Lehmann Mai 1991
  173. ;
  174. ; =========================================================================
  175.  
  176. sp_gebfakt    ldx #WTA_SPGEB    ; Prg. Nr. für Wähltaste laden
  177.     stx wta_prg    ; und bei Wähltaste ausführen
  178.  
  179.     lda geb_fakt    ; aktuellen Gebührenfaktor laden
  180.     bra geb_out    ; aktuellen Gebührenfaktor ausgeben
  181.  
  182.  
  183. ; =========================================================================
  184. ;
  185. ; Funktion    : Gebührenfaktor eingeben
  186. ;
  187. ; Eingang    : bei Wähltaste und eingeschaltetem Gebührenfaktor Modus
  188. ;    : Tastenwert (1 bis ...) im Accu
  189. ;
  190. ; Ausgang    : --------
  191. ;
  192. ; Register    : Accu
  193. ;
  194. ; (c) by Thomas Lehmann Mai 1991
  195. ;
  196. ; =========================================================================
  197.  
  198. wta_spgeb    jsr check_wta    ; Taste im Gültigkeitsbereich ?
  199.     bcs wta_spgeb_e    ; nein, Ende
  200.  
  201.     jsr input    ; Wert eintragen
  202.     ldx input_po    ; Offset auf akt. Eingabe
  203.     cpx #2        ; Wert komplett eingegeben ?
  204.     bcc wta_spgeb_e    ; nein
  205.  
  206.     ldx #00        ; 2-stellige Eingabe holen (ACCU)
  207.     jsr get_input
  208.     sta geb_fakt    ; Gebührenfaktor eintragen
  209.  
  210.     ; Gebühren Text ausgeben
  211.     ; ----------------------
  212. geb_out    stz input_po    ; Offset auf akt. Eingabe
  213.     ldx #<geb_txt    ; Text ausgeben
  214.     ldy #>geb_txt
  215.     jsr puttxt
  216.  
  217.     jsr putdez99    ; Gebührenfaktor dezimal ausgeben
  218.     jmp space
  219.  
  220. wta_spgeb_e    rts
  221.  
  222.  
  223. geb_txt    byte DSP_CLR|CURS_ON
  224.     shift "Gebuehrenfaktor: "
  225.  
  226.  
  227.  
  228.  
  229.  
  230. ; =========================================================================
  231. ;
  232. ; Funktion    : angefallene Gesprächsgebühren eintragen
  233. ;      nach Trennen des Gesprächs
  234. ;
  235. ; Eingang    : ------
  236. ;
  237. ; Ausgang    : --------
  238. ;
  239. ; Register    : Accu, X, Y
  240. ;
  241. ; (c) by Thomas Lehmann Oktober 1991
  242. ;
  243. ; =========================================================================
  244.  
  245. geb_stat    ldx geb_cnt    ; Anzahl Gebührenimpulse des Gesprächs laden
  246.     lda geb_cnt+1
  247.     phx        ; zur weiteren Addition retten
  248.     pha
  249.  
  250.     ; Gesamt Gebührenimpulse eintragen
  251.     ; --------------------------------
  252.     ldy struct_stat+STAT_GEB+1    ; Gesamt Gebühren high
  253.     sty hlp_reg            ; für add eintragen
  254.     ldy struct_stat+STAT_GEB    ; Gesamt Gebühren low
  255.     
  256.     jsr add16_16            ; (ACCU und X) + (hlp_reg und Y)
  257.     sta struct_stat+STAT_GEB+1    ; Gesamt Gebühren high
  258.     stx struct_stat+STAT_GEB    ; Gesamt Gebühren low
  259.  
  260.     
  261.     ; Monats Gebührenimpulse eintragen
  262.     ; --------------------------------
  263.     ldx uhr_buff+MON            ; aktuellen Monat laden (1-12)
  264.     dex
  265.  
  266.     ldy struct_stat+STAT_GEB+1,x    ; Monats Gebühren high
  267.     sty hlp_reg            ; für add eintragen
  268.     ldy struct_stat+STAT_GEB,x    ; Monats Gebühren low
  269.     pla                ; Anzahl Gesprächs-Gebührenimpulse
  270.     plx
  271.     jsr add16_16            ; (ACCU und X) + (hlp_reg und Y)
  272.  
  273.     ldy uhr_buff+MON            ; aktuellen Monat laden
  274.     sta struct_stat+STAT_GEB+1,y    ; Monats Gebühren high
  275.     txa
  276.     sta struct_stat+STAT_GEB,y    ; Monats Gebühren low
  277.     rts
  278.  
  279.  
  280. ; --------------------------------------------------------------------------
  281.  
  282. HLP    set    *
  283. _GEBUEHREN    equ    HLP-MODUL_START        ; Größe des Moduls
  284.  
  285.