Podczepianie bibliotek

0

Mam kernela w wersji rzeczywistej i jak podczepić bibliotekę bo ciągle wyskakują jakieś błedy jak wezmę z innego kompilatora np stdio.h

używam kompilatora TCC

Chyba da się podłączyć no nie? mi się wydaje że to jest dla danego kompilatora biblioteka napisana czyli jak mam rację to macie jakiś adres www gdzie są biblioteki normalne tzn. działające z TCC???

0

Ale funkcje z tej biblioteki moga korzystac z funkcj przerwania 21h wiec w trybie rzeczywistym bez uruchomionego DOS-a nie mozna tego uzyc.

0

Jezeli to <ort>TwÓj</ort> kernel to jedyne co mozesz a wlasciwie musisz zrobic to napisac swoja biblioteke libc (wszytskie funkcje stdio.h math.h stdlib.h itp), ktore beda wykorzystywac <ort>TwÓj</ort> system przerwan. Mozesz kompilowac programy pod winda, przepisywac dane z execa do twojego fomatu binarnego i w ten ort! tworzyc programy dla twojego kernelka.

0

Macie może jakiś kursik o tworzeniu własnych funkcji??

jak powinien wyglądać plik zewnętrzny jakiegoś programu pod mego kernela?? i jak takie coś uruchomić??

Do obu pytań bym prosił jakieś linki ale nie ogólnikowe tylko bezpośrednio do problemu bo teraz się z jednym angielskim forum męcze.

0

Moge ci dac zrodla libc z borland c++ i na ich podstawie mozesz napisac swojego liba. Co do ladowania to chyba najprostszym sposobem jest przekopiowanie danych z pliku do pamieci i skoczenie pod adres gdzie zaczyna sie ten program. w trybie rmode to raczej bedzie dzialac, ale w pmode to już pewnie tzra bedzie sie niezle pobawic ;/

0

Bym prosił takie żródełka masz gdzieś to wszudzić na ftp??

potrzebne mi są na razie: Printf; scanf itp.

0
void print(char far* s){
  asm{
    push es // nie wiem czy to potrzebne, to twoj kernel ale na push/pop niewiele stracisz czasu
    push di
    mov  di,word ptr [s]
    mov  ax,word ptr [s+2]
    mov  es,ax
    mov  bx,0007h
    mov  ah,0eh
  }
  loop:
  asm{
    mov  al,byte ptr es:[di]
    test al,al
    jz   end
    int  10h
    inc  di
    jmp  loop
  }
  end:
  asm{
    pop  di
    pop  es
  }
}

void scan(char far* s,unsigned limit){ // limit ilosc znakow+0
  asm{
    push es
    push di
    mov  dx,[limit]
    mov  di,word ptr [s]
    mov  ax,word ptr [s+2]
    mov  es,ax
    mov  bx,0007h
  }
  loop:
  asm{
    dec  dx
  }
  shortloop:
  asm{
    xor  ah,ah
    int  16h
    cmp  al,0dh    // ctrl m/enter
    je   end
    cmp  al,03h    // ctrl c/ctrl pause
    je   ctrlc
    cmp  al,08h    // ctrl h/backspace
    je   backspace
    test dx,dx
    jz   shortloop
    cmp  al,20h
    jb   shortloop  // znakow kontrolnych (ascii<32) nie wpiszesz
    mov  byte ptr es:[di],al
    inc  di
    mov  byte ptr es:[di],0
    mov  ah,0eh
    int  10h
    jmp  loop
  }
  backspace:
  asm{
    mov  ax,[limit]
    dec  ax
    cmp  dx,ax
    jnb  shortloop
    mov  ax,0e08h
    int  10h
    mov  ax,0a20h
    mov  cx,01h
    int  10h
    inc  dx
    dec  di
    jmp  shortloop
  }
  ctrlc:
  asm{
    mov  di,word ptr [s]
    mov  byte ptr es:[di],0
    mov  ax,0e5eh           // '^' w al
    int  10h
    mov  al,63h             // 'c'
    int  10h
  }
  end:
  asm{
    pop  di
    pop  es
  }
}

int main(){
  print("\r\nala ma zielonego kota\r\n");
  char a[10];
  scan(a,10);
  print("\r\n");
  print(a);
  print("\r\n");
  return 0;
}

// A może całego kernela za ciebie napisać ? Tylko wstawić twoje nazwisko ? Skoro z takimi rzeczami masz problem, to z obslugą dysków i pamięci w ogóle nie ruszysz... Zanim zaczniesz pisać systemy jeszcze wiele wody uplynie.

[dopisane]
Piszesz kernela... Jądro... Podstawę systemu. Pierwsze co musisz zrobić pisząc system, to stworzyć całą kolekcję własnych funkcji i bibliotek do kompilatora, który sobie wybierzesz. Jesli bedziesz korzystał z gotowych funkcji pisanych dla danego systemu (jak putch() w tym przypadku), to cała robota mija sie z celem. putch() jest oparte na mechanizmach systemowych (dla dosa int 21h - przerwanie systemowe), a pisząc kernela wolno korzystać tylko i wylącznie z mechanizmów sprzętowych, niezależnych od jakiegokolwiek systemu.

To, co napisałem kompiluje sie pod borlandem (bc ver<4 na pewno), ale nie jest trudno przerobić to tak, by działało pod każdym kompilatorem, który kompiluje również wstawki assemblerowe.

Dobra rada. Zostaw tą robotę dopóki nie nauczysz się dobrze c/cpp ewentualnie inneg jezyka wyższego rzędu i również assemblera, bo bez tego wbrew pozorom nie ruszysz.

0

No i zonk :(

niedziała :(

znalazłem takie coś:

void print(char *text)
{
char curchar;
while(curchar=*text++)
{
switch(curchar)
{
case '\n':
{putch(0x0D);}
default: putch(curchar);
}
}
}

co potwierdza że w asm nie trza robić no nie? bo to działa ale chcę jeszcze jakieś inne znacie może jakąś www z takimi bajerkami?? bo w asm nie chcę bo już teraz wiem że w C można to zrobić

POMOCY!! z góry dzięki wielkie :D

zamątowałem sobie takie coś:

_printf: push bp
mov bp,sp
sub sp,0x40
mov bx,[bp+4]
mov si, bx
call print
mov sp,bp
pop bp
ret

i działa :D Masz może jakiś kurs albo coś podobnego abym się dowiedział coś o pisaniu funkcji w asm?? (C jest prostrzy a asm nie czaje zbytnio bo nie miałem nikty z nim kontaktu :( ale wiem że on działa na innej zasadzie niż np C bo wydaje się w nim polecenia dla procka itp a w C troce inaczej to wygląda ecd....)

Ja tyle z osa chce napisać żeby tylko coś pobrał z klawiatury i to wypisał bo po co mi więcej?? ja się dopiero uczę a wszyscy sądzą że chce gotowca a tak nie jest np już mam zaryz jądra w C i teraz mi zostało rozgryść: bootloader, start pliku i te funkcje :D ale to wszystko i tak asm więc się nie denerwuj :)

ponawiam jeszcze raz proźbę o jakiś kursik czy coś w tym rodzaju żebym rozgryzł te polecenia w asm :D już trochę czaje i wiem że trza np poprzedzić znakiem _ aby działało po C :D

0

Powtórzę się... Niewielu na tym forum poradziłoby sobie samemu z systemem (i nie ja), więc nie zdziw się, jesli nici wyjdą z twojej roboty. Kursy asma... Cudze źródła, disassembler i debugger- najlepsza metoda. I metodyczne, cierpliwe uczenie sie od podstaw. Rzucanie sie na samym początku na system jest na pewno ambitne... Jesli ci wyjdzie gratulacje, ale musialbys byc gjeniusiem.

// tu są opisane częściowo rozkazy, ale to co jest zrobione, jest zrobione porządnie: http://4programmers.net/assembler/

0

Ja ambitny?? :P

ale spoko, się po prostu staram :D i dzięki :D

0

www.cepa.prv.pl/crtl.tar.gz

  • zrodelka cliba math liba i cos tam jeszcze z borland c++ 3, mozesz sie na tym wzorowac :)
0

Poszukuję jakiś polsko języcznych lekcji do tego ale w ostateczności może być po angielsku :D

I mam prożbę do was mianowicie tego kodu: możecie mi opisać jak takie coś musi być zbudowane i co może zawierać??

_printf: push bp
mov bp,sp
sub sp,0x40
mov bx,[bp+4]
mov si, bx
call print
mov sp,bp
pop bp
ret

1 użytkowników online, w tym zalogowanych: 0, gości: 1