Autor Thema: 16 bit x86 c compiler  (Gelesen 5491 mal)

noob

  • Beiträge: 63
    • Profil anzeigen
Gespeichert
« am: 08. March 2006, 10:40 »
Hi leute!!!

ich hab euren rat befolgt und hab mich soweit in die materie eingearbeited dass ich nun alles von einer diskette booten kann d.h ich hab mir einen bootloader in assembler geschrieben! nun will ich bei meinem os weitermachen dazu moechte ich nicht assembler verwaenden muessen! kennt einer vl einen 16 bit C compiler der fuer das osdevelopment geeignet ist? den hab ich bis jetzt gefunden:


dieser compiler nennt sich bcc ich hab auch schon 16 bit code damit erzeugt aber irgendwie will dat ganze nicht so wirklich funken :-(

vl kennt einer diesen compiler schon und er kann mir vl sagen wie ich den benutzen muss dass der code funkend wird!

danke!

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 08. March 2006, 11:28 »
tipp:

nimm gcc und den linker ld

die sind bei linux glaub ich schon dabei sonst gibts die auf www.delorie.com/djgpp im djgpp paket....(für windows/dos)

noob

  • Beiträge: 63
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 09. March 2006, 18:51 »
hi!

kann ich mit dem gcc 16 bit C code erzeugen? waenn ja wie? ich hab bei google nichts gefunden!

/*edit*/
ich hab mir nun von dem bcc folgenden asm code generieren lassen:
(die c datei:

/*nur mal n experimenteller abgeschriebener code*/
int main(){
    char *text = "Hi I am the Railex Kernel";
    char *vidMem = (char*) 0xB800;
   
    while(*text){
*vidMem = *text;
*vidMem++;
*vidMem = 7;
*vidMem++;
*text++;
    }

    return 0;
}

)

! 1
! 1 /* kernel
! 2  *
! 3  *
! 4  *
! 5  *
! 6  *
! 7  */
! 8
! 9 int main(){
export _main
_main:
! 10     char *text = "Hi I am the Railex Kernel";
push bp
mov bp,sp
push di
push si
dec sp
dec sp
mov bx,#.1
mov -6[bp],bx
! 11     char *vidMem = (char*) 0xB800;
dec sp
dec sp
mov ax,#$B800
mov -8[bp],ax
! 12    
! 13     while(*text){
jmp .3
.4:
! 14 *vidMem = *text;
mov bx,-6[bp]
mov si,-8[bp]
mov al,[bx]
mov [si],al
! 15 *vidMem++;
inc word ptr -8[bp]
mov bx,-8[bp]
mov al,*7
mov [bx],al
! 17 *vidMem++;
inc word ptr -8[bp]
mov bx,-8[bp]
! 18 *text++;
inc word ptr -6[bp]
.3:
mov bx,-6[bp]
mov al,[bx]
test al,al
jne .4
.5:
.2:
xor ax,ax
add sp,*4
pop si
pop di
pop bp
ret
! 22 }
! 23
.data
.1:
.6:
.ascii "Hi I am the Railex Kernel"
.byte 0
.bss
! 0 errors detected


dann hab ich dieses mit folgenden zeilen assembliert und gelinkt:
as86 -0 kernel.asm -o kernel --> assembliert(dieses -0 bedeuted laut man page: -0     start with 16-bit code segment, warn for all instructions > 8086)
ld86 kernel.o -> zu a.out gelinkt

dann hab ich das auf die diskette gepackt mit einem selbst geschriebenen programm das die datei nach den ersten 512 bytes der diskette kopiert

(mein bootloader funkt 100pro da ich mit diesem schon nen asm kernel booten konnte!)

waenn ich meinen pc nun starte und die disk einlege dann kommen die meldungen von meinem bootloader und dann macht mein pc nichts mehr :-(

was kann es da haben ?

danke!

noob

  • Beiträge: 63
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 11. March 2006, 21:45 »
keiner ne ahnung was es da haben koennte?

 

Einloggen