Source file: /~heha/vt/viewers/vt080.zip/src/TRANSIEN.ASM

;Include-Datei, enthält alle Videotext-bezogenen,
;rein transienten Unterprogramme (die nur beim Initialisieren
;gerufen werden)
;####################################################################
Hex2Mem:
	;3 Hexzahlen diesmal in den Speicher! (Portadresse für Dateiname)
axmem:	xchg	al,ah
	call	ahexm1
	xchg	al,ah
	push	ax cx		;Werte erhalten
	  mov	cl,4		;oberes Nibble auf Bit 3...0
	  shr	al,cl		; schieben
	 pop	cx
	 call	ahexm1
	pop	ax
ahexm1:	and	al,0fh
	add	al,90h		;Hex -> ASCII
	daa
	adc	al,40h
	daa
	stosb
	ret
;####################################################################
CheckSpeed:
	xor	ax,ax		;TEST - SAA5246 verheddert sich?
	ret
	;Anhand der gelöschten Seite 0 die Übertragung testen
	;PA: CY=1 I²C-Fehler
	;    Z=0 Lesefehler (Zu schneller Zugriff)
		AcqOff		;Nummer Sicher
	xor	bh,bh		;Seite 0 löschen
	mov	si,ofs COMentry	;Mit Code vergleichen!
	mov	di,ofs Buf
	mov	cx,512		;LEN buf/2
	segcs rep movsw		;Kopieren erforderlich, da
	call	PutPageMem	;PutPage darin herumschreiben muß
	jc	cs1
	call	GetPageMem	;Rücklesen
	jc	cs1
	mov	si,ofs COMentry
	mov	di,ofs Buf
	mov	cx,(LENGTH Buf-14)/2
	mov	ax,'  '
	segcs repe cmpsw
	clc
cs1:	ret

RAMtest:
	;Testet den RAM-Speicher des VTD, wichtig für
	;maximale Geschwindigkeitsnutzung
	;PA: CY=1 I²C-Busfehler (Verhaspelung)
	;     Z=0 RAM-Fehler (zu klein, fehlt, Computer zu schnell)
		AcqOff		;Nummer Sicher
	xor	bh,bh		;Beginne mit Seite 0
	mov	si,ofs COMentry	;Mit Code vergleichen!
rt2:	push	si
	 mov	di,ofs Buf
	 mov	cx,512		;LEN buf/2
	 segcs rep movsw	;Kopieren erforderlich, da
	 call	PutPageMem	;PutPage darin herumschreiben muß
	pop	si
	jc	rtf
	call	Point
	inc	si		;Leichter Versatz
	inc	bh
	and	bh,7		;8 Seiten!
	jnz	rt2

	mov	si,ofs COMentry
rt3:	push	si
	 call	GetPageMem
	pop	si
	jc	rtf
	mov	di,ofs Buf
	push	si
	 mov	cx,(LEN buf-14)/2 ;Reservierte Bytes nicht testen
				;(Testmuster hatte merkwürdige Reaktionen)
	 segcs repe cmpsw	;Pufferinhalte vergleichen
	pop	si
	clc
	jnz	rtf		;Fehler entdeckt
	call	Point
	inc	si
	inc	bh
	and	bh,7
	jnz	rt3
rtf:	ret

proc CheckPort	;teste Korrektheit der in DX angegebenen (transient)
	;Portadresse bzw. suche, wenn DX=0
	;PE: DX: Vermeintliche Portadresse
	;PA: [I2CBasis]=Gefundene Portadresse
	;CY=1: Kein Dekoder gefunden
	DATASEG
@Porttab dw	100h,104h,108h,210h,300h,3e0h,3e4h,10ch
	CODESEG
	mov	ax,dx		;Portadr.
	mov	cx,1
	or	ax,ax		;Portadresse=0?
	jnz	@@1		;Port testen!
	mov	si,ofs @Porttab
	mov	cx,8
@@3:	lodsw
	mov	[I2CBasis],ax
@@1:	push	cx
	 call	I2CInit
	pop	cx
	jnc	@@2		;gefunden
	loop	@@3
@@2:	ret			;nicht gefunden - mit Fehler CY zurück
	endp

;####################################################################
;Standardfunktion FExpand(SI: Dateiname):DI: Dateiname mit Pfad
;Ohne DOS-Funktion TRUENAME (weil buggy bei jeJOINten Laufwerken)
;PE: SI: Kurzer Name, DI: Puffer
;PA: DI zeigt hinter die Null, SI unverändert
	_FEXPAND

proc MakeVREQName
	;PE: SI: Arbeitsverzeichnis (wird mit FExpand ergänzt)
	; Ist SI^=#0 dann aktuelles Verzeichnis
	;PA: CY=1 - Verzeichnis existiert nicht! (Name wurde NICHT drangehängt)
	mov	di,ofs SemaFile
	push	di
	 call	FExpand
	 mov	dx,ofs DTA
	 DOS	1ah		;auf die DTA
	pop	dx
	dec	di
	cmp	di,ofs SemaFile+3	;Hauptverzeichnis?
	jz	@@root
	inc	di
	mov	cx,bit 4	;Verzeichnis!
	DOS	4eh		;FindFirst
	jc	@@e
	btst	[DTA+15h],bit 4 ;Verzeichnis?
	stc
	jz	@@e		;Kein Verzeichnis!
@@root:	dec	di
	LEAZ	si,'\VREQ'
	call	StrCpy
	dec	di
	mov	ax,[I2CBasis]
	call	Hex2Mem
	LEAZ	si,'.VTD'	;SI müßte bereits richtig stehen
	call	StrCpy
@@e:	ret
	endp

;####################################################################
proc GetPageMem		;TRANSIENT!!
	;Nur für den Speichertest!
	mov	si,ofs Buf
	mov	ax,0		;Zeile 0 Spalte 0
	call	InitGetRAM
	mov	cx,24*40	;Zeilen 0..23
	call	RI2C
	mov	ax,24
	call	InitGetRAM
	mov	cx,40		;Zeile 24 (muß extra gezogen werden...)
	call	RI2C
	mov	ax,25
	call	InitGetRAM
	mov	cx,24		;Zeile 25 (Rest)
	call	RI2C
	ret
	endp

proc PutRAM	;(transient)
	;Gibt Standardsequenz aus, um dann ins RAM zu schreiben
	;PE: AX=Zeile+256*Spalte (Adresse)
	sub	si,4		;4 Bytes vor dem Kontext anplanzen
	mov	di,si
	mov	al,8
	mov	ah,bh		;Seite
	stosw
	xchg	ax,dx		;Anfänge (Cursor)
	stosw
	add	cx,4
	call	SI2C
	ret
	endp

proc PutPageMem	;(transient)
	;Tue 1 Seite ins VTD-RAM von Buf
	;PE: BH: Seitennummer
	;    [Buf] gefüllt mit Seite UND Seiteninfos
	mov	si,ofs Buf
	mov	dx,0
	mov	cx,24*40	;Zeilen 0..23
	call	PutRAM
	jc	@@e
	mov	dx,24
	mov	cx,40		;Zeile 24
	call	PutRAM
	jc	@@e
	mov	dx,25
	mov	cx,24		;Zeile 25 (Rest)
	call	PutRAM
@@e:	ret
	endp

;####################################################################
Point:	PRINTZ	'.'		;Macht einen Punkt
	ret

	_AXHX
	_ZKONL

Detected encoding: OEM (CP437)1
Wrong umlauts? - Assume file is ANSI (CP1252) encoded