hallo,
ich habe mein problem aus dem letzten thread gelöst....
jetzt habe ich ein neues, und zwar:
bochs spring ordnungsgemäß in den c kernel und führt ihn aus.
nur stimmen meine pointer/variablen adressen nicht.
schaut es euch selber an:
char* VidMem = (char*)0x0B8000;
void printf( char* t );
void clrscr();
int main() {
char Text[] = "ABC";
clrscr();
printf( Text );
return 0;
}
void printf( char* t ) {
while( *t ){
*VidMem = *t;
t++; VidMem++;
*VidMem = 0x07;
VidMem++;
}
}
void clrscr() {
VidMem = (char*) 0x0B8000;
int i = 0;
while( i < 4000 ) {
VidMem[i++] = 0;
}
}
das bildschirmlöschen funktionniert. aber er gibt nur ein großes S auf dem bildschirm aus. macht aber keine fehlermeldung.
wenn ich per debugger durch gehe dann sagt er mir, er würde für den string die adresse 210 nehmen.....
hier mein linker script:
OUTPUT_FORMAT("binary")
INPUT(BINARIES\OSLDR32.obj BINARIES\OSLDRC.obj)
ENTRY(start)
SECTIONS
{
.text 0x200 : {
code = .; _code = .; __code = .;
*(.text)
. = ALIGN(1);
}
.data : {
data = .; _data = .; __data = .;
*(.data)
. = ALIGN(1);
}
.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(1);
}
end = .; _end = .; __end = .;
}
mfg und danke im voraus
Uni_Sol