Hi,
ich verwende asm(".code16gcc\n");.
Wenn die print() so aussieht, wird dreimal b ausgegeben.
(normalerweise steht [ebp+8] statt 'b' da).
Meine kernel.c sieht im Moment so aus:
So wird nur ein a ausgegeben. Mit Pixeln, die gezeichnet werden sollen ist es genauso.
ich verwende asm(".code16gcc\n");.
Wenn die print() so aussieht, wird dreimal b ausgegeben.
Code:
[BITS 16]
global print
print:
push ebp
mov ebp, esp
mov al, 'b'
mov ah, 0x0E
mov bl, 0x07
int 0x10
mov ebp, esp
pop ebp
o32 ret
(normalerweise steht [ebp+8] statt 'b' da).
Meine kernel.c sieht im Moment so aus:
C:
asm(".code16gcc\n");
extern void print();
extern void restart();
extern char read();
void printString(char* szString);
void testfunc(char test);
int main() {
char szWelcome[] = "Hello world, welcome to my OS. Please press a key to start.";
printString(szWelcome);
read();
testfunc('a');
read();
char szRestart[] = "Press 'r' to restart your computer.";
printString(szRestart);
while(read() != 'r');
restart();
return 0;
}
void printString(char* szString) {
short i=0;
short x=0;
while (x == 0) {
print(szString[i]);
i++;
if (szString[i] == '\0') {
x=1;
}
}
}
void testfunc(char test) {
print(test);
print(test);
print(test);
}
So wird nur ein a ausgegeben. Mit Pixeln, die gezeichnet werden sollen ist es genauso.