Du meinst den TApp-Init-Contructor?
Nein, der Muss ja nur einmal aufgerufen werden.
Der Fehler ist gefunden.
Es lag ein meiner Unit zur Tastaturabfrage, diese Unit benutzt eine andere Unit für den Interrupt, und die Unit fängt den Interrupt ab, so das TV nicht mehr auf die Tasteneingabe reagiert.
Jetzt wieder zum eigentlichen Thema.
Also das man 'Write' vergessen kann ist jetzt klar. Beim schreiben in den Video-RAM sollte man vorher sicher gehen wo der liegt, falls der verschoben wurde.
Ich benutzte im Moment ja den Interrupt 10 aber der ist bei mir noch langsamer als Write.
Hier ist der Code für die Ausgabe einer Zeichenkette:
Code: Alles auswählen
Procedure StringColorPaint(Value: String; Page, X, Y: UInt8; ColorForeground, ColorBackground: UInt8);
var
ColorTemp: UInt8;
CharTemp: UInt8;
Index: UInt8;
XTemp: UInt8;
begin
(*ColorTemp := ((ColorBackground shl 4) + ColorForeground);*)
ColorTemp := ((ColorBackground * 16) + ColorForeground);
For Index := 1 to Length(Value) do
begin
CharTemp := Ord(Value[Index]);
XTemp:= X+Index-1;
asm
MOV AH, 02h
MOV BH, Page
MOV DL, XTemp
MOV DH, Y
INT 10h
MOV AH, 09h
MOV BH, Page
MOV CX, 1
MOV AL, CharTemp
MOV BL, ColorTemp
INT 10h
end;
end;
end;
Ich weiß, das es einen Interrupt für die Ausgabe einer Zeichenkette existiert. Aber wir der zu nutzen ist, werde ich noch raus finden.
Auch die For-Schleife verlängert die ganze Ausführung.
Hier der Code für die Ausgabe eines einzeln Zeichens:
Code: Alles auswählen
Procedure CharColorPaint(Value: Char; Count: UInt16; Page, X, Y: UInt8; ColorForeground, ColorBackground: UInt8);
var
ColorTemp: UInt8;
CharTemp: UInt8;
begin
CharTemp := Ord(Value);
ColorTemp := ((ColorBackground * 16) + ColorForeground);
asm
MOV AH, 2h
MOV BH, Page
MOV DL, X
MOV DH, Y
INT 10H
MOV AH, 9
MOV BH, Page
MOV CX, Count
MOV AL, CharTemp
MOV BL, ColorTemp
INT 10H
end;
end;
Wenn ich nur ein Zeichen ausgebe, ist die Write-Methode am langsamsten die Video-RAM-Methode am schnellsten, und die Interrupt-Methode.
Ich muss mal schauen, ob ich die Interrupt-Methode verbessern kann.
Aber wie gibt TV, FV oder der Dos Navigator die Zeichen aus?
Denn dort kann man ein Fenster öffnen schließen und verschieben oder das das Bild zerstört wird. Das ist ja auch klar, sonst wäre es ja nicht sauber gelöst.
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!