Autor Thema: C Befehle??  (Gelesen 8002 mal)

najjannaj

  • Beiträge: 75
    • Profil anzeigen
Gespeichert
« am: 14. April 2004, 13:16 »
Neues Problem!
Ich hab mir nen Bootsector mit Assambler und Kernel mit C geschrieben und linken usw klappt alles! Nur jetzt will ich folgendes verwirklichen:

int anzahl;
printf ("\nBitte eine Integer-Zahl eingeben : ");  
scanf ("%d",&anzahl);

printf ("\n\nSie gaben %d ein\n",anzahl);

Er kennt aber die Befehle printf und scanf nicht! Wie kann ich die nun mit einbinden??
Vielen Dank!

najjannaj

  • Beiträge: 75
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 14. April 2004, 13:27 »
Printf habe ich wie folgt hinbekommen:


;Datei ist Video.c

void printf(const char *_message)
{
  unsigned short offset;
  unsigned long i;
  unsigned char *vidmem = (unsigned char *)0xB8000;

  out(0x3D4, 14);
  offset = in(0x3D5) << 8;
  out(0x3D4, 15);
  offset |= in(0x3D5);

  vidmem += offset*2;
  i = 0;
  while (_message != 0) {
    *vidmem = _message[i++];
    vidmem += 2;
  }

  offset += i;
  out(0x3D5, (unsigned char)(offset));
  out(0x3D4, 14);
  out(0x3D5, (unsigned char)(offset >> 8));
}



Jetzt fehlt mir noch das "scanf" kann mir da jemand helfen??? BITTE!

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #2 am: 14. April 2004, 17:36 »
Printf ist ja auch kein C Befehl, sondern eine Funktion der Standardlib.

Und da du deinen eigenen Kernel schreibst musst du auch diese Funktionen selbst schreiben.
----------------------
Redakteur bei LowLevel

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #3 am: 14. April 2004, 18:52 »
bevor du dir scanf schreiben kannst brauchst du nen tastatur-treiber. bei deinem printf hast du ja das glück das du direkt in den speicher schreiben kannst
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #4 am: 14. April 2004, 19:14 »
Und da fällt die Entscheidung:
Entweder machst du polling (Fragst über die Ports immer ab) oder du machts es über Interrupts. (Ein Programmteil wird aufgerufen, wenn du eine Taste drückst)
Dann braucht du aber erst ne IDT und dafür musst du eventuell auch noch die GDT anpassen und dann musst du auch noch den PIC (Programmable Interrupt Controler) programmieren....
Ich hoffe ja, dass das alles in der nächsten Ausgabe steht.

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #5 am: 14. April 2004, 19:59 »
@chr15
    mov    al,#0x11        ! initialization sequence
    out    #0x20,al        ! send it to 8259A-1
    call    delay
    out    #0xA0,al        ! and to 8259A-2
    call    delay
    mov    al,#0x20        ! start of hardware int's (0x20)
    out    #0x21,al
    call    delay
    mov    al,#0x28        ! start of hardware int's 2 (0x28)
    out    #0xA1,al
    call    delay
    mov    al,#0x04        ! 8259-1 is master
    out    #0x21,al
    call    delay
    mov    al,#0x02        ! 8259-2 is slave
    out    #0xA1,al
    call    delay
    mov    al,#0x01        ! 8086 mode for both
    out    #0x21,al
    call    delay
    out    #0xA1,al
    call    delay
    mov    al,#0xFF        ! mask off all interrupts for now
    out    #0xA1,al
    call    delay
    mov    al,#0xFB        ! mask all irq's but irq2 which
    out    #0x21,al        ! is cascaded
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #6 am: 14. April 2004, 20:03 »
is aus linux um die hardwareints auf 20h zu legen
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 14. April 2004, 20:44 »
Hm...is aber kein NASM oder ? Vielleicht GAS ?

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #8 am: 14. April 2004, 21:03 »
Danke!
Ich hab auch mal probiert die ersten Linux-Sourcen zu durchsuchen und zu verstehen...
Bei diesem Teil war ich noch nicht.
Aber ich sage mal: RESPEKT AN LINUS (Was der mal so eben geschrieben hat, nur um etwas über seinen neuen PC, einen i386, zu erfahren)

Dann kann ich ja jetzt auch mal so langsam anfangen mein OS zu programmieren.
Es soll ja mal Linux ersetzen ;)  --- Wer braucht schon Linux, kann man ja auch selber machen ;)

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #9 am: 14. April 2004, 21:10 »
@AnotherStupidCoder
Naja einfach die Rauten weg machen dann isses NASM ;)

@chr15
Ich würd mir einfach ma die Sourcen von 0.1 und 1.0 holen, und dann im boot Verzeichnes nachgucken. Sind noch ne Menge andere Dinge die sehr interessant sind
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #10 am: 14. April 2004, 21:11 »
Bin ja schon paar Tage dabei, war aber noch nicht bei dem Tastaturtreiber...
Und leider habe ich in den Ferien noch etwas anderes zu tun :(

Another Stupid Coder

  • Beiträge: 749
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 15. April 2004, 14:47 »
@lobmann und die | in ein ; umwandeln...ich glaub ich schreib nen GAS+NASM konverter ;)

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #12 am: 15. April 2004, 17:00 »
Also das mit der IRQ umbelegung hab ich auch so gemacht*g* nur bin ich selbst draufgekommn^^ naja und ich hab kein call delay drin
und für tastatreiber(denn ich noch nich geschrieben hab aber theoretisch kein prob wäre) wenn tasta gedrückt würd wird automatisch IRQ1 ausgelöst also nach der umbelgegung int 21h der muss dann port 60h nach dem scancode abfragen, den dann vielleicht in ascii umwandeln und in nen puffer schreiben mit dem dann das OS machen kann was es will, wenn ich mal lust hatte (und zeit) das aus meim kopf auf datei zu bringen kann ichs ja posten wenna wollt*g*
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #13 am: 15. April 2004, 17:40 »
@Roshl: Aber irgendwo her musst du das ja auch haben. Mir fällt ja auch nicht im Traum ein, dass ich auf den Port x den Wert y schreiben muss und dann den Port z auslesen muss...
Das mit dem int ist auch nicht ganz so einfach (schwer aber auch nicht), da wir über den PMode reden und nicht den RMode :)

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #14 am: 15. April 2004, 17:51 »
Es gibt zu jedem Baustein ein Datasheet. Da stehen alle Adressen, Register und Befehle drauf. Ist da allerdings natürlich nicht so schön nachzulesen wie in einem Tutorial das konkret beschreibt wie man das verwendet.
----------------------
Redakteur bei LowLevel

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #15 am: 15. April 2004, 17:56 »
Dan freue ich mich schon auf dein Tutorial.
Wann kommt eigendlich die nächste Ausgabe???
Hab' auch im Forum schon lange nichts mehr von mastermesh gehört/gelesen.

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #16 am: 15. April 2004, 18:59 »
Mastermesh ist gerade mit einem Orchester oder so unterwegs und wird wohl so in 1 Woche wieder da sein. Er hat gesagt das er dann auch bald die Ausgabe fertig machen will.
----------------------
Redakteur bei LowLevel

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #17 am: 15. April 2004, 19:10 »
Naja ich bin folgendermassen draufgekommen: Ich hatte mir ja einiges durchgelesen schon und so und daher wusste ich das der timer chip alle 18,2 sekunden IRQ0 auslösst der auf nen exeption int vom prozessor gelenkt wird. dass das aber irgndwie nicht gehen kann weil 18,2 exeptions pro sekunde kann net angehn und bei win und so passiert das ja auch nicht wars irgendwie klar dass das umgeleitet werden können muss. Hab ich bisl gesucht und gefunden über welche ports der pic umprogrammiert wird. Und dann gibts da ne portliste von ralf brown die gab mir die restlichen infos dazu. so bin ich da selbst drauf gekommen. das mit dem int ist aber einfach weils die ints im pm genauso gibt;) nur das intel die ersten 20h so dumm belegt is das problem sonst is das genau das selbe(naja und das man die bios ints nicht mehr nehmen kann aber die sind ja eh scheiss lahm also wer brauch die:P)
und wie TJ sagte isses nich ganz so einfach nach zulesen aber ich glaube das es schon erwarte werden kann das man ein paar schlussfolgerungen selber zieht, bei asm besonders weil da wird es seltener vorkommen das man tuts zu allem möglichen mist findet! und es macht viel mehr spass selsbt auf etwas zu kommen:D

grausige rechtschreibung heut wieda^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #18 am: 15. April 2004, 19:25 »
Aber die Zeiten, dass man alles selber auf englischen Sieten zusammen suchen muss, sollen ja mit diesem Magazin zuende sein!
Und ein paar Sachen mache ich ja auch selber, z.B. den Grafiktreiber ;)

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #19 am: 15. April 2004, 19:34 »
@chr15

apropos grafiktreiber hast du vielleicht irgendwelche infos oder interessante Seiten zu dem Thema.
PS:Ich häng auch schon seit Tagen an meinem Tastatur-Treiber, bin halt zur Zeit beim Bund und hab meistens kein Bock mich abends noch hinzusetzen.
Extrem Faul halt:)
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

 

Einloggen