32 ビット プロテクト モード OS プロジェクトSinatraに問題があります。ソースをオブジェクト ファイルにコンパイルできますが、これらをリンクする方法がわかりません。Windows でNASMとTDM-GCCを使用しています。コードの問題を修正して、コンパイルできるようにしました。簡潔にするためにコメントを削除しました。
私のファイルboot.asm
:
[BITS 32]
[global start]
[extern _JlMain]
start:
cli
call _JlMain
hlt
私のファイルJSinatra.h
:
#ifndef __SINATRA_H__
#define __SINATRA_H__
#define JWhiteText 0x07
void JlMain();
void JlClearScreen();
unsigned int JlPrintF(char * message, unsigned int line);
#endif
私のファイルJSinatra.c
:
#include "JSinatra.h"
void JlClearScreen() // clear entire screen
{
char * vidmem = (char * ) 0xb8000;
unsigned int i = 0;
while (i < (80 * 25 * 2)) {
vidmem[i] = ' ';
i += 1;
vidmem[i] = JWhiteText;
i += 1;
}
}
unsigned int JlPrintF(char * message, unsigned int line) {
char * vidmem = (char * ) 0xb8000;
unsigned int i = 0;
i = line * 80 * 2;
while ( * message != 0) {
if ( * message == '\n') {
line += 1;
i = (line * 80 * 2); * message += 1;
} else {
vidmem[i] = * message; * message += 1;
i += 1;
vidmem[i] = JWhiteText;
i += 1;
}
}
return (1);
}
void JlMain() {
JlClearScreen();
JlPrintF("Sinatra v0 Virgin/Kernel Mode\n", 0);
}
絶対アドレスから始まる OS をロードする必要があります0x100000
。コードを適切にコンパイルおよびリンクして、バイナリ イメージを作成するにはどうすればよいですか?