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

  1. ;**************************************************************************
  2. ;
  3. ; Filename : BTA.ASM
  4. ; ------------------
  5. ;
  6. ; (c) 1990/91 by Thomas Lehmann
  7. ;
  8. ;
  9. ; Jackophone V5.00
  10. ;
  11. ;
  12. ; BTA Routinen
  13. ;
  14. ;
  15. ;**************************************************************************
  16.  
  17. MODUL_START    set    *    ; Größe des Moduls berechnen
  18.  
  19.  
  20. ; =========================================================================
  21. ;
  22. ; Funktion    : BTA-Wahl-Modus einschalten
  23. ;      nachdem das Passwort korrekt eingegeben wurde oder Direktwahl
  24. ;      Wähltasten auf BTA-Wahl umleiten
  25. ;
  26. ; Eingang    : ----------
  27. ;
  28. ; Ausgang    : ----------
  29. ;
  30. ; Register    : Accu, X, Y
  31. ;
  32. ; (c) by Thomas Lehmann Januar 1991
  33. ;
  34. ; =========================================================================
  35.  
  36. btawhl_txt    byte    DSP_CLR
  37.     shift    "BTA   *=vor #=Ende   -->"
  38.  
  39.     byte    DSP_CLR
  40.     shift    "1=Tastenber. 2=Text  -->"
  41.  
  42.     byte    DSP_CLR
  43.     shift    "3=Ber.loesch 4=Setup -->"
  44.  
  45.  
  46. bta_tab    word set_keyber    ; Tastenberechtigung automatisch
  47.     word bta_ascii    ; Tasten-Textberechtigung einschalten
  48.     word clr_tastber    ; Tastenberechtigung löschen
  49.     word setup    ; Setup Funktionen
  50.  
  51. TAB_LEN    set    *-bta_tab    ; Tabellenlänge
  52.  
  53.  
  54.  
  55. bta    smb MOD_BTA,modus    ; BTA Modus ist aktiviert
  56.     lda #$00    ; Füllwert
  57.     jsr fill_ledram    ; alle LED`s ausschalten
  58.     smb MOD_NO_KEY,modus    ; Tastendrücke nicht auswerten
  59.     smb MOD_KEYSPEC,modus    ; Tasten haben Spezialfunktion
  60.     rmb MOD_TXT,modus    ; Tastentext nicht berechtigen
  61.  
  62.     ; Funktionstabelle für Wähltasten
  63.     ; -------------------------------
  64.     lda #TAB_LEN    ; Tabellenlänge laden
  65.     ldx #<bta_tab    ; Adresse der Tabelle
  66.     ldy #>bta_tab
  67.     jsr set_wta_fkt    ; Funktionstabelle für Wähltasten installieren
  68.     lda #WTA_BTA_WHL    ; BTA-Prg. Nr. für BTA-Wahl laden
  69.     sta wta_prg    ; und bei Wähltaste ausführen
  70.  
  71.     ldx #<btawhl_txt    ; 1. BTA Text laden
  72.     ldy #>btawhl_txt
  73.     lda #ANZ_BTATXT    ; Anzahl der Texte laden
  74.     jmp init_dsptxt    ; Textwahl initialisieren
  75.  
  76.  
  77. ; =========================================================================
  78. ;
  79. ; Funktion    : BTA-Modus auswählen
  80. ;      angewählte BTA-Funktion eingeleitet
  81. ;
  82. ; Eingang    : bei Wähltaste und eingeschaltetem BTA-Wahl-Modus
  83. ;    : Tastenwert (1 bis ...) im Accu
  84. ;
  85. ; Ausgang    : ------------
  86. ;
  87. ; Register    : Accu, X, Y
  88. ;
  89. ; (c) by Thomas Lehmann März 1990
  90. ;
  91. ; =========================================================================
  92.  
  93. wta_bta_whl    cmp #BTA_END    ; BTA verlassen ?
  94.     beq bta_off    ; ja, BTA-Modus aus
  95.  
  96.     cmp #BTA_NXT_MEN    ; nächstes Menue anzeigen ?
  97.     bne wta_bta_1    ; nein, Auswahl eines Menuepunkts
  98.  
  99.     ; nächstes BTA-Menue im Display anzeigen
  100.     ; --------------------------------------
  101.     jmp nxt_dsptxt    ; nächsten Text ausgeben
  102.  
  103. wta_bta_1    jmp wta_funkt    ; Funktion der Wähltaste ausführen
  104.  
  105.  
  106.  
  107.     ; =============
  108.     ; BTA verlassen
  109.     ; =============
  110. bta_off    jmp ledoff_ende    ; LED`s ausschalten, Key Ende ausführen
  111.  
  112.  
  113.  
  114. ; =========================================================================
  115. ;
  116. ; Funktion    : Tastentext-Berechtigung
  117. ;      der ASCII-Wert muß immer 2-stellig eingegeben werden
  118. ;      Eingaben von Werten > 99 sind deshalb nicht möglich
  119. ;
  120. ; Eingang    : -------
  121. ;
  122. ; Ausgang    : -------
  123. ;
  124. ; Register    : Accu
  125. ;
  126. ; (c) by Thomas Lehmann Januar 1991
  127. ;
  128. ; =========================================================================
  129.  
  130. bta_ascii    lda #WTA_ASCII    ; BTA-Prg. Nr. für Text berechtigen laden
  131.     sta wta_prg    ; und bei Wähltaste ausführen
  132.     rmb MOD_NO_KEY,modus    ; Tastendrücke auswerten
  133.  
  134.     smb MOD_TXT,modus    ; Text berechtigen eintragen
  135.  
  136.     lda #$ff    ; erstes Textzeichen einstellen
  137.     bra ta_txt_out    ; Textzeichen ausgeben
  138.  
  139.  
  140.  
  141. HLP    set    *
  142.  
  143. bta_asc_txt    byte 01|DSP_CLR|CURS_SET|CURS_ON
  144.     shift    "ASCII-Wert: \""
  145.  
  146. HLP    set    *-HLP
  147. INPUT_CURS    set    HLP+4    ; Position des Eingabe Cursors
  148.  
  149.  
  150.     ; =======================
  151.     ; Einsprung bei Wähltaste
  152.     ; =======================
  153.  
  154. wta_ascii_e    rts
  155.  
  156. wta_ascii    cmp #BTA_END    ; BTA verlassen ?
  157.     bne wta_ascii_1
  158.  
  159.     jmp bta        ; wieder BTA Haupt-Menue anzeigen
  160.  
  161. wta_ascii_1    cmp #BTA_NXT_MEN    ; nächsten ASCII-Wert automatisch einstellen ?
  162.     bne wta_ascii_2
  163.  
  164.     inc akt_txtchar    ; nächstes Textzeichen einstellen(NXT_BTA)
  165.     lda akt_txtchar
  166.     bra ta_txt_out    ; Textzeichen ausgeben
  167.  
  168.  
  169. wta_ascii_2    jsr check_wta    ; Taste im Gültigkeitsbereich ?
  170.     bcs wta_ascii_e    ; nein, Ende
  171.  
  172.     jsr input    ; ASCII-Wert eintragen
  173.     ldx input_po    ; Offset auf akt. Eingabe
  174.     cpx #2        ; ASCII-Wert komplett eingegeben ?
  175.     bcc wta_ascii_e    ; nein
  176.  
  177.     ldx #00        ; 2-stellige Eingabe holen
  178.     jsr get_input    ; Textwert holen (Wert im ACCU)
  179.  
  180.     sta akt_txtchar    ; aktuelles Textzeichen eintragen
  181.  
  182.  
  183.     ; Textzeichen ausgeben
  184.     ; --------------------
  185. ta_txt_out    stz input_po    ; Offset auf akt. Eingabe
  186.     ldx #<bta_asc_txt    ; Text ausgeben
  187.     ldy #>bta_asc_txt
  188.     jsr puttxt
  189.  
  190.     cmp #$00    ; ASCII-Text löschen ?
  191.     beq tast_txt_2    ; ja, Textwert belassen, Meldung ins Display
  192.  
  193.     cmp #128    ; alle Textzeichen ausgegeben ?
  194.     bcc tast_txt_1    ; nein
  195.  
  196.     lda #SPACE    ; erstes Textzeichen laden
  197.     sta akt_txtchar    ; und für Textber. einstellen
  198.  
  199. tast_txt_1    pha        ; Zeichen Wert merken
  200.     jsr putchar    ; Textzeichen der Taste ausgeben
  201.     lda #"\""    ; Anführungszeichen laden
  202.     jsr putchar    ; und ausgeben
  203.     jsr space    ; Space hinterher, Cursor ist eingeschaltet
  204.     pla        ; Zeichen zurück
  205.     jsr putdez    ; und 3-stellig ausgeben
  206.     lda #INPUT_CURS    ; Cursorposition holen
  207.     jmp curs_set    ; Cursor auf Eingabe setzten
  208.  
  209.  
  210. tast_txt_2    ldx #<clr_txt    ; Text ausgeben
  211.     ldy #>clr_txt
  212.     jmp puttxt
  213.  
  214.  
  215. clr_txt    byte DSP_CLR
  216.     shift    "Text loeschen, Taste ?"
  217.  
  218.  
  219.  
  220.  
  221.     ; =======================================
  222.     ; Einsprung bei gedrückter Taste
  223.     ; Textzeichen in Tastentextber. eintragen
  224.     ; =======================================
  225. key_ascii    ldy akt_txtchar    ; aktuelles Textzeichen laden
  226.     beq key_asc_1    ; Text auf Taste löschen
  227.  
  228.     cmp #KEY_ENDE    ; ist es "Ende" Taste
  229.     beq wta_ascii_e    ; fatal, kein Text auf Ende Taste (Terminer)
  230.  
  231. key_asc_1    txa        ; Offset auf Tastenber. kopieren
  232.     lsr a        ; Offset auf Textber. erzeugen
  233.     tax
  234.  
  235.     tya        ; aktuelles Textzeichen laden
  236.     sta tast_txt,x    ; ASCII-Zeichen für Taste in Ber. eintragen
  237.     beq ta_txt_out    ; Tastentext wurde gelöscht
  238.  
  239.     inc akt_txtchar    ; nächstes Textzeichen einstellen
  240.     inc a        ; und nächstes Textzeichen ausgeben
  241.     bra ta_txt_out    ; Textzeichen ausgeben
  242.  
  243.  
  244.  
  245. ; =========================================================================
  246. ;
  247. ; Type    : Unterprg.
  248. ;
  249. ; Eingang    : -------
  250. ;
  251. ; Ausgang    : komplette Tastenberechtigung initialisiert
  252. ;
  253. ; Register    : Accu, X, Y
  254. ;
  255. ; (c) by Thomas Lehmann Mai 1990
  256. ;
  257. ; =========================================================================
  258.  
  259. clr_tastber    lda #WTA_BER_CLR    ; BTA-Prg. Nr. für Tastenber. clr laden
  260.     sta wta_prg    ; und bei Wähltaste ausführen
  261.  
  262.     ldx #<berclr_txt    ; Text ausgeben
  263.     ldy #>berclr_txt
  264.     jmp puttxt
  265.  
  266. berclr_txt    byte DSP_CLR
  267.     shift    "!! Ber. loeschen ?? 1=ja"
  268.  
  269.  
  270. ; =========================================================================
  271.  
  272. ;
  273. ; Type    : Hauptprg.
  274. ;    : Sicherheits-Abfrage ob Tastenber wirklich gelöscht werden soll
  275. ;
  276. ; Eingang    : bei Wähltaste und eingeschaltetem BTA-Modus->Tastenber. clr
  277. ;    : Tastenwert im Accu
  278. ;
  279. ; Ausgang    : wenn ja, TW 1, komplette Tastenberechtigung gelöscht
  280. ;
  281. ; Register    : Accu, X
  282. ;
  283. ; (c) by Thomas Lehmann Mai 1990
  284. ;
  285. ; =========================================================================
  286.  
  287. wta_berclr    cmp #1        ; wurde Frage mit ja beantwortet ?
  288.     bne wta_bercl_1    ; nein, Ber. nicht clr
  289.  
  290.     ldx #<tast_tab    ; low Byte der Tastenber. laden
  291.     stx ind_adr    ; und setzen
  292.     ldx #>tast_tab    ; dito high Byte
  293.     stx ind_adr+1    ; und setzen
  294.     ldx #<KEYBER_INIT    ; low Byte Tastenber. Ende
  295.     ldy #>KEYBER_INIT    ; dito high
  296.     lda #00        ; Füllwert laden
  297.     jsr fill_ram    ; RAM füllen
  298.     jsr fill_ledram    ; alle LED`s ausschalten (ACCU=Füllwert)
  299.  
  300. wta_bercl_1    jmp bta        ; wieder 1.BTA Menue anzeigen
  301.  
  302.  
  303.  
  304.  
  305.  
  306. ; --------------------------------------------------------------------------
  307.  
  308. HLP    set    *
  309. _BTA    equ    HLP-MODUL_START        ; Größe des Moduls
  310.  
  311.