 **************************************************************************
;
; Filename : EXT_CMD.ASM
; ----------------------
;
; (c) 1990 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; Task zur Auswertung der Cmd.`s von der seriellen
;
;
;**************************************************************************

MODUL_START	set	*	; Größe des Moduls berechnen


	; ==============
	; Task Einsprung
	; ==============

epr2_txt	text "herzlich willkommen in der Welt des supertollen, total "
	text "geschickten, intelligenten JackoPhones. "
	text "Wie festgestellt wurde, ist dieser STR1 fuer das 256'er "
	null "Eprom umgeruestet, vielen Dank.                         "


extcmd_task
	block
	lda #DISPL_OFF	; kein Display Timeout
	sta displ_prg
	jsr dp_clr
	ldx #$ff
out	inx
	lda epr2_txt,x
	beq out_end	; das wars, schade

	jsr putchar
	lda #$12
	jsr task_delay
	bra out

out_end	jsr key_ende	und in Normal Betrieb schalten



	; eigentliche Task
	; ================
task_loop	ldx #<rxd_cnt	warten bis Zeichen im RX Buffer sind
	ldy #>rxd_cnt
	lda #$ff
	jsr task_wait
	lda rxd_cnt	Fehler in Taskwechsler !!!!!!!!
	beq task_loop


	; Daten wurden empfangen
	; ----------------------
	ldx rxd_offs	Offset auf RX Buffer
loop	stz led_ram+LD_RXD	RX-LED löschen
	lda rxd_buff,x	Cmd. aus Buffer holen
	jsr con_putch	Echo auf Console
	ldy cmd_cnt	Offset auf Cmd. Buffer laden
	sta cmd_buff,y	und in Cmd. Buffer eintragen
	inc cmd_cnt
	cpy cmd_cntwait	alle Eingaben erfolgt ?
	bcs loop1

	cmp #CR		Eingabe beendet ?
	bne loop2

loop1	phx
	jsr cmd_ausw	Kommando auswerten
	lda cmd_cnt	wude Auswerung gefahren ?
	bne para_wait	nö, erst alle Paras eingeben

	jsr con_putcmd	Text "Command >" ausgeben
para_wait	plx

loop2	jsr rxd_nxt	nächste Position einstellen
	stx rxd_offs
	dec rxd_cnt	alle Zeichen aus RX Buffer geholt ?
	bne loop



	bra task_loop	; neuer Durchlauf
	bend





; =========================================================================
;
; Funktion	: testen on empfangenes Zeichen gültiges Cmd. ist
;
; Eingang	: Kommando Zeile in cmd_buff
;
; Ausgang	: -------
;
; Register	: Accu, X
;
; (c) by Thomas Lehmann April 1993
;
; =========================================================================

	; Cmd., Parameter Anzahl, Fkt.-Adresse
	; ------------------------------------
cmd_tab	byte "?"	; Hilfe Text
	word con_puthlp
	byte 0

	byte CR		; Return
	word _RTS
	byte 0

	byte "v"	; Version ausgeben
	word con_version
	byte 0

	byte "R"	; Reset
	word init_stk
	byte 0

	byte "d"	; Speicher Dump
	word dump_out
	byte 5

	byte "C"	; Leitung belegen
	word key_ltg
	byte 0

	byte "D"	; Leitung trennen
	word key_trenn
	byte 0

	byte "0"	; wählen
	word dial
	byte 0
	byte "1"	; wählen
	word dial
	byte 0
	byte "2"	; wählen
	word dial
	byte 0
	byte "3"	; wählen
	word dial
	byte 0
	byte "4"	; wählen
	word dial
	byte 0
	byte "5"	; wählen
	word dial
	byte 0
	byte "6"	; wählen
	word dial
	byte 0
	byte "7"	; wählen
	word dial
	byte 0
	byte "8"	; wählen
	word dial
	byte 0
	byte "9"	; wählen
	word dial
	byte 0
	byte "*"	; wählen
	word dial
	byte 0
	byte "#"	; wählen
	word dial
	byte 0


	byte 00		Tabellen Ende

_RTS	rts



cmd_ausw
	block
	ldx #0		Tabellen Anfang
loop	lda cmd_tab,x	alle Cmd.`s getestet ?
	bne loop_1	nein

	stz cmd_cnt	neue Cmd. Auswertung
	stz cmd_cntwait	erneute Cmd-Auswertung anstoßen
	jmp con_cmderr	falsches Kommando ausgeben
loop_1	inx		; Offset auf Fkt. Adresse
	cmp cmd_buff	ist es gültiges Cmd. ?
	bne loop_2	nö, nächstes Cmd testen

	lda cmd_tab+2,x	Anzahl der Parameter holen
 jsr puthex
	cmp cmd_cntwait	wurde Cmd. bereits erkannt ?
	beq end

	sta cmd_cntwait	erst alle Parameter eingeben
	rts
	
end	lda cmd_cnt	Anzahl Eingaben im Buffer
	stz cmd_cnt	neue Cmd. Auswertung
	stz cmd_cntwait	erneute Cmd-Auswertung anstoßen
 	jmp (cmd_tab,x)	Fkt. für Kommando ausführen, Para Cnt im Accu

loop_2	inx
	inx
	inx
	bra loop
	bend




dial	lda cmd_buff
	cmp #"*"
	bne dial_raute
	adc #17
	bra dial_ziff

dial_raute	cmp #"#"
	bne dial_null
	adc #23
	bra dial_ziff

dial_null	cmp #"0"
	bne dial_ziff
	adc #9


dial_ziff	sec
	sbc #"0"
	jmp wta_wahl


; --------------------------------------------------------------------------

HLP	set	*
_EXT_CMD	equ	HLP-MODUL_START		; Größe des Moduls

