home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of A1200
/
World_Of_A1200.iso
/
programs
/
develop
/
as65
/
demo
/
s2
/
telbuch.asm
< prev
next >
Wrap
Assembly Source File
|
1995-02-27
|
5KB
|
237 lines
;**************************************************************************
;
; Filename : TELBUCH.ASM
; ----------------------
;
; (c) 1991 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; elektronisches Telefonbuch
;
;
;**************************************************************************
MODUL_START set * ; Größe des Moduls berechnen
; =========================================================================
;
; Funktion : Taste elektronisches Telefonbuch
;
; Eingang : Offset auf Tastaturtabelle in X-Reg.
; : Tastenwert im Accu
;
; Ausgang : -------
;
; Register : Accu, X, Y
;
; (c) by Thomas Lehmann März 1993
;
; =========================================================================
key_telbuch ldx #NTFKT_TELB ; NT Sonderfkt. TeleBuch
cpx namsp_fkt
bne key_tel_1 ; Telebuch Taste wurde das erste Mal betätigt
; ausgewählte Rufnummer wählen
; ============================
jsr key_ende ; alles andere beenden
jsr telb_getnt ; NT Speicher Nr. holen
jsr put_nt ; TMP Rufnummer wählen
rmb ST_2SP,feap_stat ; 2.SP wieder deaktivieren
rts
; Abrufmodus einschalten, Namen suchen
; ====================================
key_tel_1 jsr key_ende ; alles andere beenden
stx namsp_fkt ; NT Sonderfkt. TeleBuch
ldy #LD_L|LD_ON ; LED-Wert laden
jsr set_prgled ; und LED einschalten
stz input_po ; Pointer auf 1. Input setzen
smb MOD_TXT,modus ; Tasten haben Textfunktion eintragen
ldy #KEYTXT_TELB ; Prg. Nr. für Textfunktion
sty keytxt_prg ; und bei Text Taste ausführen
ldx #<abr_tel_txt ; Abruf Text ausgeben
ldy #>abr_tel_txt
jmp puttxt
abr_tel_txt byte DSP_CLR|CURS_ON
shift "Name ?"
; =======================================================
; Einsprung bei Taste mit Textfuntion, ASCII Wert im Accu
; =======================================================
telb_name
block
ldx input_po ; Pointer auf Buffer laden
cpx #MAX_TEL_CHAR ; max. Anzahl Textzeichen eingegeben ?
bcs end
sta input_buff,x ; Tastenwert ablegen
inc input_po ; Pointer auf Buffer+1
; Eintrag der auf Eingabe passt suchen
; ------------------------------------
stz ntspec_nr ; 1. Telefonbuch Nr. einstellen
ldx #0
nxt_telb lda ntspec_nr ; akt. Telefonbuch Nr. laden
cpx #0 ; ist Text im akt. TelBuch gespeichert ?
bne nxt_telb_1 ; ja, kein freier Eintrag
sta telb_free ; letzten freien Telbuch Eintrag merken
nxt_telb_1 jsr telb_settxt ; Text Adr. einstellen
bcs no_telb ; Text Nr. ungültig
inc ntspec_nr ; nächste Telefonbuch Nr. einstellen
ldy #00 ; Text Zeichen Cnt.
ldx #00
loop lda (ind_adr),y ; Zeichen aus TeleBuch Text Buffer holen
beq nxt_telb ; keine weiteren Zeichen gespeichert
inx
cmp input_buff,y ; passt es zur Eingabe ?
bne nxt_telb ; nö, nächsten Eintrag testen
iny
cpy input_po ; alle eingegebenen Zeichen verglichen ?
bcc loop ; nö, weiter testen
lda #"1"
jsr putchar
lda ntspec_nr ; akt. gefundenen Telbuch Eintrag holen
dec a
pha
jsr putdez
pla
jsr telb_settxt ; Text Adr. einstellen
bcs end
jsr space
lda (ind_adr)
jsr putdez
jmp puts ; akt. passenden Text ausgeben
; smb MOD_NT_SPEC,modus ; NT-Speicher hat Sonderfkt.
; stz ntspec_nr ; akt. Telefonbuch Nr.
; jsr telb_getnt ; akt. NT Speicher Nr. holen
; sta last_nt ; vorgaukeln das Taste bereits gedrückt wurde
; bra telbuch_out ; und ins Display
no_telb
lda #"2"
jsr putchar
lda telb_free ; letzten freien Telbuch Eintrag holen
pha
jsr putdez
pla
jsr telb_settxt ; Text Adr. einstellen
bcs end
ldy input_po ; Pointer auf Buffer laden
lda #0
sta (ind_adr),y ; Tastenwert ablegen
dey
lda input_buff,y ; Text Eingabe holen
sta (ind_adr),y ; Tastenwert ablegen
jmp puts
end rts
bend
; =====================================
; Telbuch Text Nr. im Accu
; Ausgang: SEC == ungültige Eintrag Nr.
; =====================================
telb_settxt
block
cmp #MAX_TEL ; max. Anzahl der Einträge im Telefonbuch
bcs end
tax ; low Byte Mult
lda #0 ; high Byte Mult
ldy #MAX_TEL_CHAR ; Anzahl Textzeichen je Eintrag
jsr mul16_8 ; Offset auf Textspeicher
ldy #>teltxt_buff ; Adr. der Telbuch Texte einstellen
sty hlp_reg
ldy #<teltxt_buff
jsr add16_16
sta ind_adr+1
stx ind_adr
clc
end rts
bend
telbuch_out lda last_nt ; akt. NT Speicher Nr. laden
rmb EDIT_NT,allg_stat ; Rufnr. ist zum editieren ausgegeben
jmp keynam_sp ; Rufnr. der NT ausgeben und speichern
; akt. gespeicherte Telefonbuch Nummer ausgeben
; wird über namsp_fkt von keynam_sp aufgerufen
; --------------------------------------------
put_telnt
ldx #<telnt_txt ; Text ausgeben
ldy #>telnt_txt
jsr puttxt
lda ntspec_nr ; akt. Nr. laden
jsr putdez9 ; und ausgeben
jsr space
lda last_nt ; akt. NT Speicher holen
jmp put_nt ; Rufnummer der NT ausgeben/wählen
telnt_txt byte CURS_ON
shift "TelNT"
; =====================================
; Nr. der akt. NT für Telefonbuch holen
; =====================================
telb_getnt rmb ST_2SP,feap_stat ; erstmal 1.SP aktivieren
lsr ; 2 Speicher je NT
bcc telb_frstsp ; NT im 1. Speicher
smb ST_2SP,feap_stat ; 2.SP ist aktiv
clc
telb_frstsp adc #NT_TELBUCH ; 1. Telefonbuch NT
rts
; --------------------------------------------------------------------------
HLP set *
_TELBUCH equ HLP-MODUL_START ; Größe des Moduls