;**************************************************************************
;
; Filename : UTIL.ASM
; -------------------
;
; (c) 1990/91 by Thomas Lehmann
;
;
; Jackophone V5.00
;
;
; verschiedene Utility Routinen
;
;
;**************************************************************************

MODUL_START	set	*	; Größe des Moduls berechnen

; =========================================================================
;
; Funktion	: RAM füllen
;
; Eingang	: Füllwert im Accu
;	: Startadresse in ind_adr
;	: Endadr. low in X-Reg.
;	: Endadr. high in Y-Reg.
;
; Ausgang	: Bereich zwischen Start und Endadr. mit Wert beschrieben
;
; Register	: ------
;
; (c) by Thomas Lehmann Feb. 1990
;
; =========================================================================

fill_ram	sta (ind_adr)	; RAM mit Füllwert beschreiben
	cpx ind_adr	; low Byte der Adresse erreicht ?	
	bne fill_1	; nein

	cpy ind_adr+1	; high Byte der Adresse erreicht ?	
	bne fill_1	; nein
	rts

fill_1	?inc16 ind_adr	; nächste Bank ($0100) einstellen
	bra fill_ram



; =========================================================================
;
; Funktion	: alle LED`s ausschalten, "Ende-Taste" ausführen
;
; Eingang	: ---------
;
; Ausgang	: ---------
;
; Register	: Accu
;
; (c) by Thomas Lehmann Feb. 1990
;
; =========================================================================

ledoff_ende	lda #00		; Füllwert laden
	jsr fill_ledram	; alle LED`s ausschalten
	jmp key_ende	; Ende Taste ausführen



; =========================================================================
;
; Funktion	: Wähltaste eintragen
;
; Eingang	: Tastenwert im Accu
;
; Ausgang	: Taste im Input-Buffer abgelegt und im Display ausgegeben
;
; Register	: Accu
;
; (c) by Thomas Lehmann Feb. 1990
;
; =========================================================================

input	phx		; Register retten
	ldx input_po	; Pointer auf Buffer laden
	sta input_buff,x	; Tastenwert ablegen
	inc input_po	; Pointer auf Buffer+1
	clc
	adc #48		; ASCII zur Taste addieren
	jsr putchar	; und ins Display
	plx		; Register zurück
	rts


; =========================================================================
;
; Funktion	: 2. stellige Eingabe aus Inputbuffer holen und in 1.Byte
;	  konvertieren
;
; Eingang	: Pointer auf Eingabe in X-Reg.
;
; Ausgang	: Wert im Accu
;
; Register	: Accu
;
; (c) by Thomas Lehmann Feb. 1990
;
; =========================================================================

get_input	phy		; Register retten
	phx
	txa		; Pointer auf Eingabe
	asl		; 2 Byte Eingaben
	tax
	lda input_buff,x	; Wert high laden
	ldy input_buff+1,x	; dito low
	jsr merge_val	; 1 Byte erzeugen
	plx		; Register zurück
	ply
	jmp deztohex	; dezimal in Hex wandeln




; =========================================================================
;
; Funktion	: testen ob Wähltaste im Gültigkeitsbereich, 0-9
;	  Wähltaste "0" konvertieren
;
; Eingang	: Tastenwert im Accu
;
; Ausgang	: clc wenn Tastenwert 1-9
;	: Accu 0 wenn es Taste "0" war
;	: Tastenwert im Accu
;
; Register	: Accu
;
; (c) by Thomas Lehmann Feb. 1990
;
; =========================================================================

check_wta	cmp #11		; Taste im Gültigkeitsbereich ?
	bcs check_wta_e	; nein, Ende

	cmp #10		; ist es "0" ?
	bne check_wta_1	; nein, Taste gültig

	lda #00		; Tastenwert korrigieren
check_wta_1	clc		; Taste liegt im Gültigkeitbereich
check_wta_e	rts





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

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


