Autor Thema: C - printf geht net  (Gelesen 3650 mal)

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« am: 08. March 2006, 17:50 »
meine print funktion im c-kernel sieht ja so aus(auflösung: 80 * 20)


unsigned int print(char *message, unsigned int line)
{
char *vidmem = (char *) 0xb8000;
unsigned int i=0;

i=(line*80*2);

while(*message!=0) // 24h
{
if(*message==0x2F)
{
*message++;
if(*message==0x6e)
{
line++;
i=(line*80*2);
*message++;
if(*message==0)
{
return(1);
};
};
};
vidmem[i]=*message;
*message++;
i++;
vidmem[i]=0x7;
i++;
};

return(1);
};


aber sie gibt nix aus... why?? ich hab schon versch. probiert aber das geht alles nich!!

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 08. March 2006, 23:19 »
Hi,

Komischer Code, sehe aber keinen Fehler irgendwie :)

Hier mal mein kprintf, vielleicht hilft das ja...

void kprintf(char *fmt,...)
{
ushort *vid_buf=(ushort*)0xB8000;
static int pos=1;
char str[256];
va_list ap;
int i;

va_start(ap,fmt);
vsprintf(str,fmt,ap);
va_end(ap);

fmt=str;

while(*fmt)
{
switch(*fmt)
{
case '\n':
pos+=80-(pos%80);
break;

default:
if(pos>=80*25)
{
for(i=1;i<24;i++)
memcpy(&vid_buf[(i-1)*80],&vid_buf[i*80],160);

memset(&vid_buf[80*24],0,160);

pos=-80;
}

vid_buf[pos++]=*fmt | 0x0700;
break;
}

fmt++;
}
}


Gruß GhostCoder
A man, a legend!

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 09. March 2006, 14:02 »
@Coffe: Meine Funktion geht auch nicht  :roll:
Bist du im PM?

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 09. March 2006, 16:17 »
also... ich hab zum ausprobieren teejay's c-kernel daten genommen aba hab den ckernel "komplett umgekrempelt" mit anderen worten bin ich im pm...... naja ich kann kaum c ich hab zwar c++ gelernt aba ich find das geht mit c viel einfacher und hab deswegen nur n paar tutorials durchgelesen(~250 seiten)... dann ist das dabei rausgekommen.....

 

Einloggen