Im DOS(!) Screen löschen
- 
					
					
					
					
 Hi, Wie kann ichim DOS - NICHT IN DER KONSOLE! - den Bildschirminhalt löschen? In den FAQ steht zwar ne ganze Menge, das ist aber nur für die Konsole.  
 
- 
					
					
					
					
 Hallo ... unter DOS hab' ich das immer so gemacht: einen Zeiger, der in's Bildschirm-RAM zeigt definiert und dann alles ab dieser Adresse mit dem gewünschten Bytes überschrieben. Der Bildschirmspeicgher beginnt in DOS normalerweise an der Adresse 0B8000h. In C sollte das so aussehen (ungetestet): int main(void) { unsigned char *screen = (unsigned char*)0x0B8000; int i; for (i = 0; i < 80*25*2; i++) screen[i] = 0; return 0; }Der Code sollte mit einem 16-Bit Compiler (Turbo C 2/3) compiliert werden. Du musst 4000 (80*25*2) Zeichen löschen, weil im Standard 80x25 Textmodus pro Zeichen 2 Bytes abgespeichert werden. Eines für das Zeichen selbst, das andere für die Farbcodierung dieses Zeichens. 
 
- 
					
					
					
					
 ach ja ... wenn Du mehr unter DOS programmieren musst/willst, kann ich Dir zwei Bücher empfehlen, die man aber nur noch gebraucht bekommen kann (leider): - PC intern, Michael Tischer 
 - Das neue PC-Profibuch, Martin Althaus
 
- 
					
					
					
					
 Danke erstmal. Das Programm wird zwar kompiliert, macht aber absolut garnichts...  Das soll zwar nur ein kleiner Ausflug in die DOS-Welt sein, aber trotzdem danke für die Buchtipps. Das soll zwar nur ein kleiner Ausflug in die DOS-Welt sein, aber trotzdem danke für die Buchtipps.
 
- 
					
					
					
					
 ich dachte 0x0B800 sei die richtige adresse, versuchs mal damit, also mit debug komm ich bei der adresse richtig raus! 
 das sind wirklich 5 zeichen, das muss so sein *g*, die adresse ist in wirklichkeit B8 00 und damit das von dos nicht mit irgendetwas anderem verwechselt wird (hab vergessen womit), muss man das so: 0x0B800 schreiben
 
- 
					
					
					
					
 muss man das so: 0x0B800 schreiben Nein, muß man nicht. Das muß Du dann, wenn Du den Assembler bemühst. Mit der führenden 0 zeigst Du im an, daß es sich um eine Zahl handelt. In C setzt Du da 0x vor und benötigst die 0 nicht mehr. Außerdem fehlt Dir hinten eine 0. Die Adresse ist schon die, die mady angegeben hat. Aber der Pointer muß IMO ein Far-Pointer sein. Einfacher geht es jedenfalls mit poke aus <dos.h>: #define BUILD_TEXTATTR(f, b) (int)((((b) & 0x0F) << 4) | ((f) & 0x0F)) #define BLANK(chr, attr) (int)((((attr) & 0xFF) << 8) | ((chr) & 0xFF)) void clrscr(void) { int i; for(i = 0; i < (80 * 25 * 2); i += 2) poke(0xB800, i, BLANK(' ', BUILD_TEXTATTR(7, 0))); // Cursor Home poke(0x0045, 0, 0); return; }
 
- 
					
					
					
					
 wieso FEHLT mir hinten eine null, du hast doch auch B800 geschrieben, und das ist die adresse, also wenn ich in dos 
 debug
 d B800:0
 eingebe, kommt das richtige raus, oder muss man die letzte null von "b800:0" irgendwie mit einstricken??
 
- 
					
					
					
					
 wieso FEHLT mir hinten eine null, du hast doch auch B800 geschrieben, und das ist die adresse, Nein, das ist das Segment. Die Adresse ist 0xB800 * 16 + i. oder muss man die letzte null von "b800:0" irgendwie mit einstricken?? So wird da schon eher ein Schuh draus. 
 
- 
					
					
					
					
 @-King-: Danke, das funzt. 