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

  1. ;**************************************************************************
  2. ;
  3. ; Filename : NAMTAST.ASM
  4. ; ----------------------
  5. ;
  6. ; (c) 1990/91 by Thomas Lehmann
  7. ;
  8. ;
  9. ; Jackophone V5.00
  10. ;
  11. ;
  12. ; Namentasten Handling
  13. ;
  14. ;
  15. ;**************************************************************************
  16.  
  17. MODUL_START    set    *    ; Größe des Moduls berechnen
  18.  
  19.  
  20.  
  21. ; =========================================================================
  22. ;
  23. ; Funktion    : Namentaste auswerten
  24. ;      der NT Speicher ist folgendermaßen aufgeteilt:
  25. ;      NT 0        : Babyphone Rufnr.
  26. ;      NT 1-?   : NT Rufnr. im 1. RAM
  27. ;      NT ?-100 : NT Rufnr. im 2. RAM
  28. ;      NT 101-? : Rufnr. für Telefonbuch
  29. ;
  30. ; Eingang    : Offset auf Tastaturtabelle in X-Reg.
  31. ;    : Tastenwert im Accu
  32. ;
  33. ; Ausgang    : LED in Namentaste eingeschaltet
  34. ;
  35. ; Register    : Accu, X, Y
  36. ;
  37. ; (c) by Thomas Lehmann März 1990
  38. ;
  39. ; =========================================================================
  40.  
  41. namsp_tab    word put_nt    ; standard Namentaste speichern/kontrollieren
  42.     word put_notruf    ; Notruf Namentaste speichern/kontrollieren
  43.     word put_telnt    ; TeleBuch Namentaste speichern/kontrollieren
  44.  
  45.  
  46. key_namen    jsr curs_off    ; Cursor ausschalten
  47.     pha        ; Tastenwert retten
  48.     lda tast_tab+1,x    ; NT Nr. holen
  49.     tax        ; Tastennr.
  50.     pla        ; Tastenwert holen
  51.  
  52.     ; LED in vorheriger NT ausschalten
  53.     ; --------------------------------
  54.     ldy #LD_L|LD_R|LD_OFF    ; LED-Wert laden
  55.     jsr set_prgled    ; LED in allen NT ausschalten
  56.  
  57.     ; LED in gedrückter NT einschalten
  58.     ; --------------------------------
  59.     ldy #LD_L|LD_T    ; LED-Wert für 1.Speicher laden
  60.     bbr ST_2SP,feap_stat,key_nam_1sp    ; 2.Speicher nicht aktiv
  61.  
  62.     ldy #LD_R|LD_T    ; LED-Wert für 2.Speicher laden
  63. key_nam_1sp    jsr set_twnrled    ; LED in NT einschalten
  64.  
  65.  
  66.     txa        ; NT Nr. -> Accu
  67.     clc
  68.     adc #NT_NAMTAST    ; 1. gültige NT (10-...) generieren
  69.     rmb NT_OUT,allg_stat        ; Rufnr. auf NT wählen
  70.  
  71.     bbs MOD_SP,modus,keynam_sp    ; Rufnr. auf Namentaste speichern
  72.     bbr MOD_KO,modus,keynam_whl    ; Rufnummer auf NT wählen
  73.  
  74.     ; NT kontrollieren
  75.     ; ----------------
  76. keynam_out    jsr dp_clr            ; Display löschen
  77.     smb NT_OUT,allg_stat        ; Rufnr. auf NT nur ausgeben
  78.     ldx namsp_fkt    ; akt. Funktion für Namen Speicher
  79.     jmp (namsp_tab,x)    ; und ausführen
  80.  
  81.     ; Rufnr. auf Namentaste wählen/ausgeben
  82.     ; =====================================
  83. keynam_whl    jmp put_nt    ; Rufnummer der NT ausgeben/wählen
  84.  
  85.  
  86.  
  87.     ; Rufnummer der gedrückten NT ausgeben
  88.     ; ====================================
  89. last_nt_out    lda last_nt    ; NT Nr. laden
  90.     jsr keynam_out    ; und Rufnummer erneut ausgeben
  91.     sty ziff_offs    ; Offset auf NT Buffer für nächste Ziffer
  92. key_nam_end    rts
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.     ; Auswahl der NT für Rufnr. speichern (NT Nr. im Accu)
  100.     ; Einsprung auch von Babyphone, Notruf, Telefonbuch !!!
  101.     ; ====================================================
  102. keynam_sp
  103.     block
  104.     ldx #WTA_SPNAM    ; WTA Prg. für Speichern NT
  105.     stx wta_prg    ; und bei Wähltaste ausführen
  106.  
  107.     jsr getnam_adr    ; Adr. der NT nach (nam_sp) holen
  108.     bcc key_nam_end    ; Speicherbereich ist nicht gültig
  109.  
  110.     cmp last_nt    ; gleiche Taste erneut gedrückt ?
  111.     sta last_nt    ; letzte NT merken
  112.     bne nam_aktiv    ; nein
  113.  
  114.     ; Rufnr. zum editieren anzeigen
  115.     ; -----------------------------
  116.     bbs EDIT_NT,allg_stat,nam_aktiv    ; Eingabe toggeln
  117.  
  118.     smb EDIT_NT,allg_stat    ; Rufnr. ist zum editieren ausgegeben
  119.     bra last_nt_out        ; Rufnr. ausgeben
  120.  
  121.  
  122.     ; Rufnr. Eingabe aktivieren
  123.     ; -------------------------
  124. nam_aktiv    rmb EDIT_NT,allg_stat    ; komplette Rufnr. eingeben
  125.     lda #MAX_NAM_ZIFF-1        ; 1. Ziffer einstellen
  126.     sta ziff_offs
  127.     jmp put_rufnr        ; "Rufnummer ?" ausgeben
  128.     bend
  129.  
  130.  
  131.  
  132.  
  133.     ; =====================================================
  134.     ; nächste Spezial NT einstellen und im ACCU zurückgeben
  135.     ; =====================================================
  136. nt_nxt_spec
  137.     block
  138.     lda last_nt    ; akt. NT Speicher holen
  139.     bbr ST_2SP,feap_stat,set    ; 2.SP ist nicht aktiv
  140.  
  141.     rmb ST_2SP,feap_stat    ; 2.SP ist nicht aktiv
  142.     inc a               ; nächsten NT Speicherplatz einstellen
  143.     inc last_nt
  144.             rts
  145.  
  146. set    smb ST_2SP,feap_stat
  147.     rts
  148.     bend
  149.  
  150.  
  151.  
  152.  
  153. ; =========================================================================
  154. ;
  155. ; Funktion    : Rufnummer auf einer Namentaste speichern/kontrollieren
  156. ;
  157. ; Eingang    : Auswahl bei Speichern/Kontrolle
  158. ;
  159. ; Ausgang    : Wähltastatur abgeschaltet, wird durch NT Druck aktiviert
  160. ;
  161. ; Register    : X
  162. ;
  163. ; (c) by Thomas Lehmann März 1990
  164. ;
  165. ; =========================================================================
  166.  
  167. spko_namkey
  168.     block
  169.     ldx #WTA_NOPRG    ; kein WTA-Programm ausführen
  170.     stx wta_prg    ; und bei Wähltaste ausführen
  171.  
  172.     ldx #<nt_txt    ; Text ausgeben
  173.     ldy #>nt_txt
  174.     jmp puttxt
  175.  
  176.  
  177. nt_txt    byte    DSP_CLR
  178.     shift "Namentaste ?"
  179.  
  180.     bend
  181.  
  182.  
  183. ; =========================================================================
  184. ;
  185. ; Funktion    : Ziffer auf NT speichern
  186. ;
  187. ; Eingang    : bei Wähltaste und eingeschaltetem Namentasten-Speicher-Modus
  188. ;    : Tastenwert (1 bis ...) im Accu
  189. ;
  190. ; Ausgang    : eingegebene Rufnummer auf der Namentaste gespeichert
  191. ;
  192. ; Register    : Accu, Y
  193. ;
  194. ; (c) by Thomas Lehmann Oktober 1991
  195. ;
  196. ; =========================================================================
  197.  
  198. wta_spnam
  199.     block
  200.     smb EDIT_NT,allg_stat    ; Rufnr. ist zum editieren ausgegeben
  201.     ldy ziff_offs    ; Offset auf akt. Ziffer laden
  202.     bmi end        ; max. Anzahl Ziffern eingegeben
  203.  
  204.     pha        ; Ziffer retten
  205.     lda (nam_sp),y    ; Ziffer für 1. und 2. Speicher laden
  206.     bbs ST_2SP,feap_stat,nam_2sp    ; 2.SP ist aktiv
  207.  
  208.     ; Rufnummer für 1.Speicher ermitteln
  209.     ; ----------------------------------
  210.     and #%11110000    ; unteres Nibble = 1.Speicher ausblenden
  211.     sta hlp_reg
  212.     pla        ; Ziffer zurück
  213.     bra nam_write    ; und Ziffernwert eintragen
  214.  
  215.     ; Rufnummer für 2.Speicher ermitteln
  216.     ; ----------------------------------
  217. nam_2sp    and #%00001111    ; oberes Nibble = 2.Speicher ausblenden
  218.     sta hlp_reg
  219.     pla        ; Ziffer zurück
  220.     asl        ; unteres Nibble ins obere schieben
  221.     asl        ; Rufnr. des 2.Speichers steht im high Nibble
  222.     asl
  223.     asl
  224.  
  225. nam_write    ora hlp_reg    ; Ziffer vom anderen (1.oder 2.Speicher) dazu
  226.     sta (nam_sp),y    ; neue Ziffer speichern
  227.  
  228.     ; Ende der Rufnr. kennzeichnen
  229.     ; ----------------------------
  230.     dey        ; nächste Ziffer ist Ende Kennung
  231.     bra nam_clr    ; Ende Kennung eintragen
  232.  
  233. end    rts
  234.     bend
  235.  
  236.  
  237. ; =========================================================================
  238. ;
  239. ; Funktion    : einzelne Ziffer auf Namentaste löschen
  240. ;      !! Vergleich ob Y negativ ist == kein Löschen (letzte Ziffer)
  241. ;
  242. ; Eingang    : Offset auf Ziffernbuffer in Y
  243. ;
  244. ; Ausgang    : -------
  245. ;
  246. ; Register    : Accu
  247. ;
  248. ; (c) by Thomas Lehmann Oktober 1991
  249. ;
  250. ; =========================================================================
  251.  
  252. nam_clr
  253.     block
  254.     bmi end        ; keine Ende Kennung notwendig
  255.  
  256.     lda (nam_sp),y    ; Ende-kennung für 1. und 2. Speicher laden
  257.     bbs ST_2SP,feap_stat,nam_clr_2sp    ; 2.SP ist aktiv
  258.  
  259.     and #%11110000    ; unteres Nibble ausblenden, letzte Ziffer 1.SP
  260.     bra nam_clr_1    ; und Endekennzeichnung speichern
  261.  
  262. nam_clr_2sp    and #%00001111    ; oberes Nibble ausblenden, letzte Ziffer 2.SP
  263. nam_clr_1    sta (nam_sp),y    ; letzte Ziffer kennzeichnen
  264. end    jmp last_nt_out    ; und Rufnummer erneut ausgeben
  265.     bend
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272. ; =========================================================================
  273. ;
  274. ; Funktion    : letzte Ziffer auf Namentaste löschen
  275. ;
  276. ; Eingang    : bei Löschtaste und eingeschaltetem Namentasten-Speicher-Modus
  277. ;
  278. ; Ausgang    : letzte eingegebene Ziffer clr wenn bereits Eingabe erfolgt ist
  279. ;      sonst wird die komplette Rufnr. gelöscht
  280. ;
  281. ; Register    : Accu, Y
  282. ;
  283. ; (c) by Thomas Lehmann Mai 1990
  284. ;
  285. ; =========================================================================
  286.  
  287. namziff_clr    smb EDIT_NT,allg_stat    ; Rufnr. ist zum editieren ausgegeben
  288.     ldy ziff_offs    ; akt. Ziffer laden
  289.     cpy #MAX_NAM_ZIFF-1
  290.     beq nam_clr    ; noch keine Ziffer eingegeben, alles löschen
  291.  
  292.     iny        ; vorherige Ziffer einstellen
  293.     bra nam_clr    ; und Ziffer löschen
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301. ; =========================================================================
  302. ;
  303. ; Funktion    : Rufnummer einer Namentaste ausgeben
  304. ;      die Rufnummer wird von hinten nach vorne gespeichert.
  305. ;      Das vorzeitige Ende der Rufnr. wird durch NUL gekennzeichnet.
  306. ;
  307. ; Eingang    : NT Nr. im Accu
  308. ;    : BIT NT_OUT in allg_stat == 1, Rufnr. auf NT nur ausgeben
  309. ;
  310. ; Ausgang    : Offset auf nächste Ziffer hinter Ausgabe in Y
  311. ;      Anzahl ausgegebene Ziffern in X
  312. ;
  313. ; Register    : Accu, X, Y
  314. ;
  315. ; (c) by Thomas Lehmann Oktober 1991
  316. ;
  317. ; =========================================================================
  318.  
  319. put_nt
  320.     block
  321.     jsr getnam_adr    ; Adr. der Namentaste in (nam_sp) eintragen
  322.     bcc end        ; Speicherbereich ist nicht gültig
  323.  
  324.     ; Rufnr. auf Namentaste ausgeben
  325.     ; ------------------------------
  326.     ldy #MAX_NAM_ZIFF-1    ; Ptr. auf erste Ziffer stellen
  327.     ldx #$00    ; Ziffern Counter
  328. loop    lda (nam_sp),y    ; Ziffer laden
  329.  
  330.     bbr ST_2SP,feap_stat,nam_out_1sp    ; 2.SP ist nicht aktiv
  331.  
  332.     ; Ziffer für 2.Speicher ermitteln
  333.     ; -------------------------------
  334.     lsr        ; oberes Nibble ins untere schieben
  335.     lsr        ; Rufnr. des 2.Speichers steht im high Nibble
  336.     lsr
  337.     lsr
  338.  
  339.     ; Ziffer für 1.Speicher ermitteln
  340.     ; -------------------------------
  341. nam_out_1sp    and #%00001111    ; oberes Nibble ausblenden
  342.     beq nam_end    ; alle Ziffern ausgegeben
  343.  
  344.     bbs NT_OUT,allg_stat,nam_out    ; Rufnummer nur anzeigen
  345.  
  346.     ; Ziffer auf Namentaste wählen
  347.     ; ----------------------------
  348.     jsr whl_ziff    ; Ziffer wählen
  349.     bra nxt_nam
  350.  
  351. nam_out    jsr wta_displ    ; Ziffer ins Display schreiben
  352. nxt_nam    inx        ; Anzahl ausgegebener Ziffern
  353.     dey        ; nächste Ziffer einstellen
  354.     bpl loop    ; nächste Ziffer holen
  355.  
  356.  
  357. nam_end    bbr EDIT_NT,allg_stat,nam_end_1    ; Edit Modus nicht aktiv
  358.     jsr curs_on    ; Cursor für Editier Modus einschalten
  359.  
  360. nam_end_1    cpx #$00    ; wurden Ziffern ausgegeben
  361.     bne end        ; ja, Ende
  362.  
  363.     bbs MOD_NT_SPEC,modus,end    ; Sonder Funktion für NT-Speicher
  364.  
  365.     phy        ; Offset auf NT Buffer retten
  366.     jsr curs_off    ; Cursor ausschalten
  367.     ldx #<nbel_txt    ; "NT nicht belegt" ausgeben
  368.     ldy #>nbel_txt
  369.     jsr puttxt
  370.     ply
  371. end    rts
  372.  
  373.  
  374. nbel_txt    byte    DSP_CLR
  375.     shift "Namentaste nicht belegt"
  376.  
  377.     bend
  378.  
  379.  
  380.  
  381. ; =========================================================================
  382. ;
  383. ; Funktion    : Adr. für Speicherbereich einer Namentaste ermitteln
  384. ;
  385. ; Eingang    : NT Nr. im Accu
  386. ;
  387. ; Ausgang    : Adr. auf Namenspeicher der Taste in "nam_sp"
  388. ;    : SEC == Adr. eingestellt, CLC == kein Zusatz RAM
  389. ;
  390. ; Register    : ------
  391. ;
  392. ; (c) by Thomas Lehmann Oktober 1991
  393. ;
  394. ; =========================================================================
  395.  
  396. getnam_adr
  397.     block
  398.     pha        ; Register retten
  399.     phx
  400.     phy
  401.  
  402.     ; Start-Adr. für Namenspeicher on Board (RAM 1)
  403.     ; ---------------------------------------------
  404.     ldx #<nam_buff1
  405.     ldy #>nam_buff1
  406.  
  407.     cmp #MAX_NAM1    ; Speicherbereich für NT im 1.RAM ?
  408.     bcc nam_adr    ; ja, Adresse berrechnen
  409.  
  410.     sbc #MAX_NAM1    ; 1. NT im Zusatz RAM einstellen
  411.  
  412.     ; Adr. für Namenspeicher im Zusatz RAM (RAM 2)
  413.     ; --------------------------------------------
  414.     bbr ST_ZRAM,allg_stat,nam_adr_err    ; Zusatz-RAM nicht vorhanden
  415.  
  416.     ; Start-Adr. für Namenspeicher im Zusatz-RAM
  417.     ; ------------------------------------------
  418.     ldx #<nam_buff2
  419.     ldy #>nam_buff2
  420.  
  421.  
  422.     ; Adresse der Namentaste im RAM berechnen
  423.     ; ---------------------------------------
  424. nam_adr    sty hlp_reg    ; high Byte der Startadr.
  425.     ldy #MAX_NAM_ZIFF    ; Multiplikator, Anz. der Ziffern je Namentaste
  426.  
  427.     ; (NT Nr. (accu) * Anz. Ziffern je NT) + Startadr. (hlp_reg, X)
  428.     jsr mul_add    ; (Accu * Y) + (hlp_reg, X) == (Accu, X)
  429.     stx nam_sp    ; low Adr. des Namespeichers
  430.     sta nam_sp+1    ; dito high
  431.     sec        ; Adr. eingestellt
  432.     bra nam_adr_ok
  433.  
  434.     ; Zusatz-RAM ist nicht installiert, Fehlertext ausgeben
  435.     ; -----------------------------------------------------
  436. nam_adr_err    jsr put_kzram    ; Text "Zusatz RAM fehlt" ausgeben
  437.     clc        ; kein Zusatz RAM vorhanden
  438. nam_adr_ok    ply        ; Register zurück
  439.     plx
  440.     pla
  441.     rts
  442.     bend
  443.  
  444.  
  445.  
  446.  
  447. ; --------------------------------------------------------------------------
  448.  
  449. HLP    set    *
  450. _NAMTAST    equ    HLP-MODUL_START        ; Größe des Moduls
  451.  
  452.