;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
|
|