Hallo,
Mein neuestes Problem, bei dem ich wirklich nicht weiter weiß...neben globalen Variablen kann ich nun auch keine Funktionen benutzen...Es sollte am C-Kernel liegen, alles andere hatte ich schon zum testen ausprobiert...ich habe den Kernel 2 mal nur von C in Assembler übersetzen lassen, 1mal mit dem Code in der Main-Funktion (klappt) einmal mit dem Code in "void PutCharA()" (klappt nicht!) wäre nett wenn jemand wüsste was da los ist...
C-Code: (der funzt. Im 2. Asm-Code wurde dann alles nach "PutCharA();" aus der Main-Funktion in die PutCharA-Funktion kopiert.)
unsigned char *VGA;
void PutCharA();
void main()
{
VGA = (unsigned char *)0xA0000;
PutCharA();
unsigned int PositionOfTheChar = 1 * 80 * 10;
VGA[PositionOfTheChar] = 0x3C; // 00 11 11 00
VGA[PositionOfTheChar + 80] = 0x42; // 01 00 00 10
VGA[PositionOfTheChar + 160] = 0x81; // 10 00 00 01
VGA[PositionOfTheChar + 240] = 0xFF; // 11 11 11 11
VGA[PositionOfTheChar + 320] = 0x81; // 10 00 00 01
VGA[PositionOfTheChar + 400] = 0x81; // 10 00 00 01
VGA[PositionOfTheChar + 480] = 0x81; // 10 00 00 01
VGA[PositionOfTheChar + 560] = 0x81; // 10 00 00 01
};
void PutCharA()
{
};
1. Asm-Code (Wo alles in der Main-Funktion steht)
.file "Main.c"
.text
.globl PutCharA
.type PutCharA, @function
PutCharA:
pushl %ebp
movl %esp, %ebp
popl %ebp
ret
.size PutCharA, .-PutCharA
.globl main
.type main, @function
main:
pushl %ebp
movl $655360, VGA
movl %esp, %ebp
call PutCharA
movb $60, 656160
movb $66, 656240
movb $-127, 656320
movb $-1, 656400
movb $-127, 656480
movb $-127, 656560
movb $-127, 656640
movb $-127, 656720
popl %ebp
ret
.size main, .-main
.comm VGA,4,4
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.3.3"
Und so sieht das ganze aus, wenn der Code in die PutCharA-Funktion ausgelagert wurde:
.file "Main.c"
.text
.globl PutCharA
.type PutCharA, @function
PutCharA:
movl VGA, %eax
pushl %ebp
movl %esp, %ebp
movb $60, 800(%eax)
movl VGA, %eax
movb $66, 880(%eax)
movl VGA, %eax
movb $-127, 960(%eax)
movl VGA, %eax
movb $-1, 1040(%eax)
movl VGA, %eax
movb $-127, 1120(%eax)
movl VGA, %eax
movb $-127, 1200(%eax)
movl VGA, %eax
movb $-127, 1280(%eax)
movl VGA, %eax
movb $-127, 1360(%eax)
popl %ebp
ret
.size PutCharA, .-PutCharA
.globl main
.type main, @function
main:
pushl %ebp
movl $655360, VGA
movl %esp, %ebp
popl %ebp
jmp PutCharA
.size main, .-main
.comm VGA,4,4
.section .note.GNU-stack,"",@progbits
.ident "GCC: (GNU) 3.3.3"
gcc --freestanding -Os -fno-builtin -c -o Main.obj Main.c
ld --oformat "binary" -o Kernel.bin Start32.obj Main.obj
Also, falls jemand gerade Zeit hat