1561
Lowlevel-Coding / PIT
« am: 20. March 2005, 11:24 »
weil << 8 das low byte ins high byte verschiebt. welchen sinn soll das haben?
06. May 2024, 03:31
Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.
char *VideoMem = (char*)0xB8000;
void print(char* eing) { // eing ist ein zeiger auf eine zeichenkette, deswegen char*
char *Text = eing;
while(*Text){
*VideoMem = *Text;
VideoMem++; // wir verändern den zeiger, nicht den wert in VideoMem[0] (das * muss weg)
*VideoMem = 7;
VideoMem++; // das * muss weg. siehe oben
Text++; // das * muss weg. siehe oben
line++; // <---- was bedeutet das?
}//end while
}//end outp
After loading the root diskette into the RAM disk you will be
asked to finish the name of the device to mount on /usr. Type fd0c for a
diskette that contains both ROOT and USR, otherwise replace ROOT by USR
and type fd0. Login as root.
char*VideoMem=(char*)0xB8000;
int xPos=0;
int yPos=0;
// du musst print deklarieren _bevor_ du es verwendest:
void print(unsigned char _zeichen); // <------- zeile 20/30
void printf (char *string)
{
char zeichen=*string; // <------- zeile 8
while(zeichen != '\0')
{
switch(zeichen)
{
case '\n':
/*NewLine();*/
break;
case '\t':
/*PrintTab();*/
break;
default:
print(zeichen);
}
*string++;
zeichen=*string; // <------- zeile 23
}
}
void print(unsigned char _zeichen)
{
if(xPos==80)
{
xPos=1;
yPos++;
if(yPos==26)
{
/*ClearScreen();*/
yPos=1;
char*VideoMem=(char*)0xB8000;
}
}
*VideoMem=_zeichen; // <------- zeile 42
xPos++;
*VideoMem++;
*VideoMem=7; // <------- zeile 45
}
ausser dem ist micro$oft visual basic was für kidys... und es STINKT!
76543210b >> 4 = 00007654b
zahl = 0x3F;
highnibble = (zahl >> 4) & 0xF; // zahl um vier stellen nach rechts schieben und die 4 unteren bits (1111b = Fh) holen
lownibble = zahl & 0xF; // nur die 4 unteren bits (1111b = Fh) holen
Edit: Warum nehm ich net gleich long, dann brauch ich keine 3 funktioonen?
ich weiß zwar dass man bei "main" einen unterstrich vorsetzen muss, aber da
hat dann er linker [ld] unter linux gemotzt.
char *VideoMem = (char*)0xA8000;
.text 0xFF800000 : {
*VideoMem = (char*)0xB8000;
*VideoMem = *VideoMem + (xPos*2-2)
*VideoMem = *VideoMem + (yPos-1)*160
VideoMem = (char*)0xB8000;
VideoMem = VideoMem + (xPos*2-2);
VideoMem = VideoMem + (yPos-1)*160;
for(*VideoMem = *string; *VideoMem =! '/0'; *VideoMem++)
for(; *string != '\0'; VideoMem++)
while(*string)
while(*string)
{
*VideoMem++ = *string++; // sprich den wert in *string nach *VideoMem schreiben und beide (VideoMem und string) erhöhen
*VideoMem++ = '7'; // sprich: 7 nach *VideoMem schreiben und VideoMem um 1 erhöhen
...
void NewLine
void NewLine()
Und wann ändert sich DS (Wenn ich nicht manuell den Wert ändere) ?
int * var;
var = (int*)0x1234; // unsere variable befindet sich an der adresse 0x1234
*var = 1000; // in die Variable den Wert 1000 schreiben
*var++; // die variable um 1 erhöhen
Klar, dass die 64-Bit schneller sind