home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
develop
/
as65
/
demo
/
s1
/
bta.asm
< prev
next >
Wrap
Assembly Source File
|
1995-02-27
|
8KB
|
311 lines
;**************************************************************************
;
; Filename : BTA.ASM
; ------------------
;
; (c) 1990/91 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; BTA Routinen
;
;
;**************************************************************************
MODUL_START set * ; Größe des Moduls berechnen
; =========================================================================
;
; Funktion : BTA-Wahl-Modus einschalten
; nachdem das Passwort korrekt eingegeben wurde oder Direktwahl
; Wähltasten auf BTA-Wahl umleiten
;
; Eingang : ----------
;
; Ausgang : ----------
;
; Register : Accu, X, Y
;
; (c) by Thomas Lehmann Januar 1991
;
; =========================================================================
btawhl_txt byte DSP_CLR
shift "BTA *=vor #=Ende -->"
byte DSP_CLR
shift "1=Tastenber. 2=Text -->"
byte DSP_CLR
shift "3=Ber.loesch 4=Setup -->"
bta_tab word set_keyber ; Tastenberechtigung automatisch
word bta_ascii ; Tasten-Textberechtigung einschalten
word clr_tastber ; Tastenberechtigung löschen
word setup ; Setup Funktionen
TAB_LEN set *-bta_tab ; Tabellenlänge
bta smb MOD_BTA,modus ; BTA Modus ist aktiviert
lda #$00 ; Füllwert
jsr fill_ledram ; alle LED`s ausschalten
smb MOD_NO_KEY,modus ; Tastendrücke nicht auswerten
smb MOD_KEYSPEC,modus ; Tasten haben Spezialfunktion
rmb MOD_TXT,modus ; Tastentext nicht berechtigen
; Funktionstabelle für Wähltasten
; -------------------------------
lda #TAB_LEN ; Tabellenlänge laden
ldx #<bta_tab ; Adresse der Tabelle
ldy #>bta_tab
jsr set_wta_fkt ; Funktionstabelle für Wähltasten installieren
lda #WTA_BTA_WHL ; BTA-Prg. Nr. für BTA-Wahl laden
sta wta_prg ; und bei Wähltaste ausführen
ldx #<btawhl_txt ; 1. BTA Text laden
ldy #>btawhl_txt
lda #ANZ_BTATXT ; Anzahl der Texte laden
jmp init_dsptxt ; Textwahl initialisieren
; =========================================================================
;
; Funktion : BTA-Modus auswählen
; angewählte BTA-Funktion eingeleitet
;
; Eingang : bei Wähltaste und eingeschaltetem BTA-Wahl-Modus
; : Tastenwert (1 bis ...) im Accu
;
; Ausgang : ------------
;
; Register : Accu, X, Y
;
; (c) by Thomas Lehmann März 1990
;
; =========================================================================
wta_bta_whl cmp #BTA_END ; BTA verlassen ?
beq bta_off ; ja, BTA-Modus aus
cmp #BTA_NXT_MEN ; nächstes Menue anzeigen ?
bne wta_bta_1 ; nein, Auswahl eines Menuepunkts
; nächstes BTA-Menue im Display anzeigen
; --------------------------------------
jmp nxt_dsptxt ; nächsten Text ausgeben
wta_bta_1 jmp wta_funkt ; Funktion der Wähltaste ausführen
; =============
; BTA verlassen
; =============
bta_off jmp ledoff_ende ; LED`s ausschalten, Key Ende ausführen
; =========================================================================
;
; Funktion : Tastentext-Berechtigung
; der ASCII-Wert muß immer 2-stellig eingegeben werden
; Eingaben von Werten > 99 sind deshalb nicht möglich
;
; Eingang : -------
;
; Ausgang : -------
;
; Register : Accu
;
; (c) by Thomas Lehmann Januar 1991
;
; =========================================================================
bta_ascii lda #WTA_ASCII ; BTA-Prg. Nr. für Text berechtigen laden
sta wta_prg ; und bei Wähltaste ausführen
rmb MOD_NO_KEY,modus ; Tastendrücke auswerten
smb MOD_TXT,modus ; Text berechtigen eintragen
lda #$ff ; erstes Textzeichen einstellen
bra ta_txt_out ; Textzeichen ausgeben
HLP set *
bta_asc_txt byte 01|DSP_CLR|CURS_SET|CURS_ON
shift "ASCII-Wert: \""
HLP set *-HLP
INPUT_CURS set HLP+4 ; Position des Eingabe Cursors
; =======================
; Einsprung bei Wähltaste
; =======================
wta_ascii_e rts
wta_ascii cmp #BTA_END ; BTA verlassen ?
bne wta_ascii_1
jmp bta ; wieder BTA Haupt-Menue anzeigen
wta_ascii_1 cmp #BTA_NXT_MEN ; nächsten ASCII-Wert automatisch einstellen ?
bne wta_ascii_2
inc akt_txtchar ; nächstes Textzeichen einstellen(NXT_BTA)
lda akt_txtchar
bra ta_txt_out ; Textzeichen ausgeben
wta_ascii_2 jsr check_wta ; Taste im Gültigkeitsbereich ?
bcs wta_ascii_e ; nein, Ende
jsr input ; ASCII-Wert eintragen
ldx input_po ; Offset auf akt. Eingabe
cpx #2 ; ASCII-Wert komplett eingegeben ?
bcc wta_ascii_e ; nein
ldx #00 ; 2-stellige Eingabe holen
jsr get_input ; Textwert holen (Wert im ACCU)
sta akt_txtchar ; aktuelles Textzeichen eintragen
; Textzeichen ausgeben
; --------------------
ta_txt_out stz input_po ; Offset auf akt. Eingabe
ldx #<bta_asc_txt ; Text ausgeben
ldy #>bta_asc_txt
jsr puttxt
cmp #$00 ; ASCII-Text löschen ?
beq tast_txt_2 ; ja, Textwert belassen, Meldung ins Display
cmp #128 ; alle Textzeichen ausgegeben ?
bcc tast_txt_1 ; nein
lda #SPACE ; erstes Textzeichen laden
sta akt_txtchar ; und für Textber. einstellen
tast_txt_1 pha ; Zeichen Wert merken
jsr putchar ; Textzeichen der Taste ausgeben
lda #"\"" ; Anführungszeichen laden
jsr putchar ; und ausgeben
jsr space ; Space hinterher, Cursor ist eingeschaltet
pla ; Zeichen zurück
jsr putdez ; und 3-stellig ausgeben
lda #INPUT_CURS ; Cursorposition holen
jmp curs_set ; Cursor auf Eingabe setzten
tast_txt_2 ldx #<clr_txt ; Text ausgeben
ldy #>clr_txt
jmp puttxt
clr_txt byte DSP_CLR
shift "Text loeschen, Taste ?"
; =======================================
; Einsprung bei gedrückter Taste
; Textzeichen in Tastentextber. eintragen
; =======================================
key_ascii ldy akt_txtchar ; aktuelles Textzeichen laden
beq key_asc_1 ; Text auf Taste löschen
cmp #KEY_ENDE ; ist es "Ende" Taste
beq wta_ascii_e ; fatal, kein Text auf Ende Taste (Terminer)
key_asc_1 txa ; Offset auf Tastenber. kopieren
lsr a ; Offset auf Textber. erzeugen
tax
tya ; aktuelles Textzeichen laden
sta tast_txt,x ; ASCII-Zeichen für Taste in Ber. eintragen
beq ta_txt_out ; Tastentext wurde gelöscht
inc akt_txtchar ; nächstes Textzeichen einstellen
inc a ; und nächstes Textzeichen ausgeben
bra ta_txt_out ; Textzeichen ausgeben
; =========================================================================
;
; Type : Unterprg.
;
; Eingang : -------
;
; Ausgang : komplette Tastenberechtigung initialisiert
;
; Register : Accu, X, Y
;
; (c) by Thomas Lehmann Mai 1990
;
; =========================================================================
clr_tastber lda #WTA_BER_CLR ; BTA-Prg. Nr. für Tastenber. clr laden
sta wta_prg ; und bei Wähltaste ausführen
ldx #<berclr_txt ; Text ausgeben
ldy #>berclr_txt
jmp puttxt
berclr_txt byte DSP_CLR
shift "!! Ber. loeschen ?? 1=ja"
; =========================================================================
;
; Type : Hauptprg.
; : Sicherheits-Abfrage ob Tastenber wirklich gelöscht werden soll
;
; Eingang : bei Wähltaste und eingeschaltetem BTA-Modus->Tastenber. clr
; : Tastenwert im Accu
;
; Ausgang : wenn ja, TW 1, komplette Tastenberechtigung gelöscht
;
; Register : Accu, X
;
; (c) by Thomas Lehmann Mai 1990
;
; =========================================================================
wta_berclr cmp #1 ; wurde Frage mit ja beantwortet ?
bne wta_bercl_1 ; nein, Ber. nicht clr
ldx #<tast_tab ; low Byte der Tastenber. laden
stx ind_adr ; und setzen
ldx #>tast_tab ; dito high Byte
stx ind_adr+1 ; und setzen
ldx #<KEYBER_INIT ; low Byte Tastenber. Ende
ldy #>KEYBER_INIT ; dito high
lda #00 ; Füllwert laden
jsr fill_ram ; RAM füllen
jsr fill_ledram ; alle LED`s ausschalten (ACCU=Füllwert)
wta_bercl_1 jmp bta ; wieder 1.BTA Menue anzeigen
; --------------------------------------------------------------------------
HLP set *
_BTA equ HLP-MODUL_START ; Größe des Moduls