Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Themen - WhiteDragon

Seiten: [1]
1
Lowlevel-Coding / Verwirrung mit der Floppy und den Festplatten.
« am: 10. November 2005, 11:18 »
Hallo zusammen,

ich mach mal einen neuen Thread auf hierfür, auch wenn mir bewusst ist, dass dies nicht der erste zu dem Thema ist.

Laut CMOS kann ich bis zu zwei Floppy-Laufwerke haben, ich habe aber auch schon mal was von bis zu vier gelesen. Was davon ist nun richtig?

Dann wäre es schön, wenn mir mal jemand was zum Thema "Festplattentyp" sagen könnte. Im CMOS kann man den Typ einer Festplatte abfragen, aber was genau der dann besagt, steht dort nicht.
2
Lowlevel-Coding / Zeitdifferenz / Zeitangabe.
« am: 30. October 2005, 16:53 »
Hallo zusammen,

also man benötigt häufiger mal Zeitangaben oder Zeitmessungen. Bei Windows wird beispielsweise bei jedem Ereignis die Zeit mit angegeben, zu der das Ereignis stattfand.

Weiß einer, wie das genau gemacht wird? Holt man sich jedesmal die kompletten CMOS-Port-Angaben und berechnet daraus einen 32Bit-Wert mit der aktuellen Zeitangabe?

Kann man natürlich so machen, aber vielleicht kennt jemand ja eine bessere Methode...
3
Lowlevel-Coding / Mehrere Stacks ohne TSS?
« am: 28. October 2005, 12:33 »
Also langsam verstehe ich einiges bezüglich Multitasking, das mir trotz Tutorials unklar war. Auch dass ich zum Abfangen von Stack-Overflow mehrere Tasks je Applikation (je Privilegstufe) verwende.

Nun verwende ich software-basiertes Multitasking. Gibt es eine Möglichkeit, trotzdem mehrere Stacks zu definieren?

Oder anders gefragt: Kann ich das TSS verwenden, auch wenn ich weiterhin softwarebasiertes Multitasking betreibe? Oder stehen mir nur bei hardware-basiertem Multitasking mehrere Stacks je Privilegstufe zur Verfügung?
4
Lowlevel-Coding / Font setzen.
« am: 26. October 2005, 18:03 »
Hallo zusammen,

hat einer (PorkChicken vielleicht?) auch einen ASM-Code, um einen eigenen Font zu definieren?

Wäre toll, nachdem wir nun auch den Code haben, um ohne BIOS Video-Modi zu setzen.

Gruß!
5
Lowlevel-Coding / Stack Overflow.
« am: 25. October 2005, 13:23 »
Also da der andere Thread vom Thema abgekommen ist, will ich für meine Frage mal ein neues auf machen:

Die meisten dürften inzwischen ihre Exception-Handler programmiert haben. Da ist ja auch einer für den "Stack overflow" dabei (Int 12, denke ich).

Meine Frage: Wenn der Stack voll ist, wie kann ich dann dafür sorgen, dass man nach dem Interrupt (und nach Vergrößerung des Stacks) wieder zurück kommt? Die Rücksprungadresse und die Flags haben ja keinen Platz mehr auf dem Stack...
6
Lowlevel-Coding / Expand Down ohne Stackoverflow?
« am: 22. October 2005, 18:22 »
Ich habe heute meine bisherige Stackverwaltung in einem Datensegment durch eine Expand-Down-Verwaltung abgeändert. Funktioniert soweit ganz gut.

Aber was ich nicht verstehe: Warum meldet mir Bochs den Fehler "can_push(): expand-down: esp-N < limit", wenn ich am unteren Ende des Stackbereiches angekommen bin? Eigentlich würde ich eine Stack-Overflow-Exception erwarten, die kommt aber nicht.

Kann mir das jemand erklären?
7
Lowlevel-Coding / Source in Bochs?
« am: 11. October 2005, 10:50 »
Hallo zusammen,

gibt es eigentlich eine Möglichkeit, im Bochs-Debugger mit Quellcode zu arbeiten?

Gruß!
8
Lowlevel-Coding / Stapelüberlauf abfangen.
« am: 11. October 2005, 08:06 »
Hallo zusammen,

also ich bin gerade dabei, die verschiedenen Exceptions zu realisieren. Beim Test des Stapelüberlaufs (IRQ#12) habe ich aber so ein Problem:

Anstatt in die ISR zu laufen, bootet Bochs einfach neu. Und wenn ich an die Stelle debugge, sagt er mir beim entsprechenden verursachenden Befehl (z.B. PUSH) folgendes:

CPU_LOOP 1
Error: (0) print_guard_results: guard_found ? (stop reason 0)

Mein Test sieht so aus, dass ich einem Programm mit eigenem Stacksegment einfach den Stackpointer auf Null setze und anschließend den PUSH absetze.

Kann mir jemand sagen, wo mein Problem liegt?

Falls es hilfreich sein sollte(ich weiß ja selbst nicht, wo mein Fehler liegt):

Im Deskriptor verwende ich als Attribut-Byte 10010010b, also genau wie das Datenattribut-Byte. Oder sollte ich das für den Stack besser anders setzen?

Besten Dank im Voraus für eure Hilfe!
9
Lowlevel-Coding / Applikationen: Aufruf und ähnliches.
« am: 05. October 2005, 11:15 »
Hallo zusammen,

also mit meinem OS bin ich nun soweit, dass ich gerne Applikationen ausführen würde. Nun habe ich in der GDT/LDT schon die Segmente für Code, Daten und Stack vorbereitet und möchte gerne in das Programm hinein springen.

Hierfür bin ich mir nicht sicher, wie ein entsprechender JMP-Befehl auszusehen hat. Descriptor-Nummer und Offset habe ich, Stack- und Datendescriptor kann ich natürlich vorher schon laden. Aber wie springe ich nun genau in die Application, damit der Code-Descriptor auch verwendet wird?

Oder gibt es eine schönere Möglichkeit, alle Daten auf den Stack zu packen und mit einem RET FAR oder etwas ähnlichem hinein zu springen? Bei einem Wiederaufsetzen auf ein schon begonnenes Programm (soll schließlich eine Multitasking-Umgebung werden) wäre natürlich auch interessant, wie ich auch die Standardregister auf ihren Ursprungswert kriege. Vielleicht wäre ein IRET dafür besser geeignet, aber ich bin leider noch etwas unerfahren in dieser Hinsicht...

Wäre schön, wenn ihr mir sagen könntet, was ein guter Weg ist oder wie ihr selbst es realisiert habt.

Gruß und vielen Dank im Voraus!
10
Lowlevel-Coding / Booten vom USB-Stick? Wer weiß was?
« am: 19. September 2005, 21:58 »
Hallo zusammen,

inzwischen gibt es ja BIOSses, die ein Booten vom USB-Stick erlauben.

Weiß jemand, wie das geht? Was muss man beachten?

Natürlich ist dann auch noch die Frage: Wie spreche ich nach dem Booten den USB-Stick an? Funktioniert das dann auch noch über das BIOS oder muss man dann USB-Codierung beginnen?
11
Lowlevel-Coding / Keine Reaktion auf 80x50 bei PC?
« am: 13. September 2005, 19:20 »
Hallo zusammen,

mein Bootloader schaltet den 80x50-Textmodus über das BIOS über folgende Befehlsfolge ein:


; Zuerst Modus 03 setzen (80x25).
mov ax, 0003h              
int 10h

; Dann 8x8-Font laden.
xor bx, bx                  
mov ax, 1112h
int 10h


In Bochs funktioniert das prima. Auf meinem LowTech-Laptop (3 Jahre altes IBM-Notebook, fast nur Standardhardware enthalten) klappt es ebenfalls ohne Probleme.

Auf meinem PC allerdings (Radeon 9600-Series-Grafikkarte) schaltet er bei dieser Befehlsfolge (wie ich annehme ist sie es) kurz den Bildschirm ab und wenn er sich kurz darauf wieder einschaltet habe ich einen leeren Bildschirm und links oben meinen Hardwarecursor. Die Ausgaben, die ich ab 0xb8000 tätige sind nicht zu sehen. Und außerdem schalte ich den Hardwarecursor ab, er sollte also eigentlich nicht blinken.

Kann mir jemand einen Tipp bzw. eine Erklärung geben? Vielleicht ist meine Befehlsfolge auch zu spezifisch, keine Ahnung...

Gruß und Dank im Voraus!
12
Lowlevel-Coding / Floppy-Zugriff ohne BIOS.
« am: 06. September 2005, 11:20 »
Hallo zusammen,

ich habe inzwischen viele Routinen (C und Assembler) gefunden, die einen Direktzugriff der Floppy über Ports regeln. Jedoch noch kein wirkliches Tutorial, in dem das Wie und vor allem das Warum erklärt wird.

Kann mir jemand einen Tipp geben?

Gruß!
13
Lowlevel-Coding / Mehrere kleine Fragen.
« am: 05. September 2005, 05:26 »
Hallo zusammen,

ich habe mehrere Fragen, stelle die einfach mal nummeriert hier rein:

1) Wenn ich mein OS über den Boot-Sektor lade, bleibt anschließend die Lampe für Disketten-/Festplattenaktivität an und ich höre (beim Laptop) auch das Diskettenlaufwerk. Ich nehme an, dass ich den Motor nach dem Lesen von Sektoren manuell wieder abschalten muss. Wie mache ich das?

2) Moderne PCs/Laptops kann man programmgesteuert ausschalten (macht Windows beispielsweise nach dem Runterfahren automatisch). Kann mir jemand sagen, wie das geht bzw. einen Codeschnipsel dafür geben?

3) Kann mir jemand einen Tipp zum Thema PCI nennen? V2OS beispielsweise kann alle PCI-Geräte auflisten, aber was genau hat man davon? Hilft PCI auch beim Lesen/Schreiben? Die bisher von mir gefundenen Tutorials waren diesbezüglich etwas zu theoretisch gehalten, wäre toll, wenn mir jemand einen anderen Link oder Buchtipp geben könnte.

4) Thema DMA: Hat das schon mal jemand verwendet? Wird es durch PCI ersetzt oder ist es sinnvoll, beides parallel zu betreiben?

Mag sein, dass die beiden letzten Fragen schwachsinnig sind, dafür entschuldige ich mich dann im Voraus in aller Form!

Danke für alle, die mir helfen!

Gruß!
14
Lowlevel-Coding / Ebenfalls Interrupt-Problem.
« am: 19. August 2005, 22:21 »
Hallo zusammen,

ich habe auch ein kleines Interrupt-Problem: Wenn ich unten stehenden Code ausführe (als Kernel, egal von welcher Startadresse aus) meldet er mir eine Exception 16, aber das war's dann - sowohl innerhalb von Bochs als auch beim "echten" Booten von Diskette.

Würde mich ja erstmal nicht stören, aber warum erhalte ich keine weiteren Exceptions? Es bleibt immer bei der einzigen ersten!

Wäre gut, wenn mir jemand helfen könnte oder aber wenigstens bestätigen würde, dass mein Code soweit in Ordnung ist (oder auch nicht)...

Danke!


use16

        ; A20-Line enablen für Speicherzugriff >1MB.
        call    EnableA20Gate

        ; Interrupts disablen.
        cli

        ; Hardware-Interrupts über PIC nach 20h.27h und 28h..2fh umbiegen.
        mov     al, 11h         ; ICW1.
        out     20h, al
        out     0a0h, al
        mov     al, 20          ; ICW2.
        out     21h, al
        mov     al, 28h
        out     0a1h, al
        mov     al, 4           ; ICW3.
        out     21h, al
        mov     al, 2
        out     0a1h, al
        mov     al, 1           ; ICW4.
        out     21h, al
        out     0a1h, al

        ; IDT laden.
        mov     ecx, IDT_TR
        lidt    [ecx]

        ; GDT laden.
        mov     ecx, GDT_TR
        lgdt    [ecx]

        ; In Protected Mode wechseln.
        mov     ecx, cr0
        or      cl, 01
        mov     cr0, ecx

.pm_far_jmp:

        db 0eah                         ; FAR-JMP-Befehl.
        dw .pm_1                        ; Offset im Zielsegment. Ist immer noch 0 - welch ein Glück!
        dw GDT_Kernel_Code - GDT_BEGIN  ; Deskriptor innerhalb der GDT.

; Im Protected Mode - daher use32!

use32

.pm_1:

        mov     ax, GDT_Kernel_Data - GDT_BEGIN
        mov     ds, ax                  ; DS mit Deskriptor laden.
        mov     es, ax                  ; ES mit Deskriptor laden.
        mov     fs, ax                  ; FS mit Deskriptor laden.
        mov     gs, ax                  ; GS mit Deskriptor laden.

        ; Stack liegt erstmal auch im normalen Datensegment, aber noch an gleicher Stelle.
        mov     ss, ax
        mov     esp, 9ffffh

        ; Bescheid geben, dass wir im Kernel sind.
        mov     si, msgInside
        call    WriteMessage

        ; Interrupts wieder frei geben.
        sti

.STOP1: jmp     .STOP1


Die Interrupt-Routinen für die Exceptions sehen bislang alle gleich aus (für "interrupt_nummer" einfach einen Wert 0 bis 31 angebend):


        sti
        pusha
        mov     eax, interrupt_nummer
        push    ds
        push    es
        push    fs
        push    gs

        mov     esi, msgException
        call    WriteMessage

        pop     gs
        pop     fs
        pop     es
        pop     ds
        popa
        cli
        iret
15
Lowlevel-Coding / 80386-Nachweis.
« am: 14. August 2005, 08:12 »
Hallo zusammen,

ich wollte diese Nachricht eigentlich im Resource Center unterbringen, dort darf ich aber natürlich nicht rein schreiben.

Also ich habe unter http://www.chris-soft.de/tutorials/386-detection/ ein kleines Tutorial veröffentlicht, in dem erläutert wird, wie man erkennt, dass mindestens ein 80386 vorliegt. Vielleicht könnte das ja in die Tutorial-Liste auf der Seite mit aufgenommen werden.

Generell habe ich die Frage: An wen muss ich mich wenden, wenn ich Tutorials auf LowLevel veröffentlichen möchte?

Gruß!
16
Lowlevel-Coding / Bootsektor schreiben...
« am: 03. August 2005, 21:17 »
Hallo zusammen,

passt vielleicht nicht in dieses Forum rein, aber ich versuch's trotzdem: Welches Tool verwendet ihr zum Schreiben eines Boot-Sektors auf Diskette? Ich habe mehrere ausprobiert, bin aber noch mit keinem wirklich glücklich.

Gruß, und Dank im Voraus!
17
Das Wiki / Wunschthemen...
« am: 02. August 2005, 21:56 »
Hallo zusammen,

also ich hätte da zwei Wünsche zu Themen für das Magazin oder Tutorials:

Zum einen hab ich so meine Schwierigkeiten mit Bochs Emulator, vielleicht wäre das mal eine Idee für einen Newbee komplett von vorne zu erzählen, wie man den bedient (auch wenn manche das für selbstverständlich und total einfach halten).

Dann wäre da noch etwas, von dem ich nicht weiß, ob es nicht schon in einem Tutorial steckt (vielleicht in einer Untersektion): Ich habe so mein Problem mit dem Speicheraufbau eines PCs. Dass in den ersten 1024 Bytes die Interrupt-Vektor-Tabelle steht weiß ich und auch, dass sich das BIOS ab 0xffff hin lädt. Aber was mit dem Rest ist wüsste ich auch gerne. Vielleicht gibt es ja auch Speicherbereiche, an die man nicht ran sollte aus bestimmten Gründen oder solche, wo ROM liegt oder oder oder...

Ja, ich weiß, Wünsche zu Hauf, aber ich dachte, dass ich die auch mal loswerde...

Gruß!
18
Das Wiki / Respekt!
« am: 02. August 2005, 09:45 »
Hallo zusammen,

nachdem ich vor ca. 6 Jahren meine ersten Erfahrungen mit OS-Programmierung gemacht habe (die leider nach 1,5 Jahren wieder eingeschlafen sind), habe ich gestern eure Seite entdeckt.

Super! Allein die Idee ist schon genial, aber auch die Umsetzung der Seite zwingt mich zu einer tiefen Verbeugung!

Habe schon eine Menge Anregungen und vor allem auch Antworten aus dem Magazin und der Seite selbst gezogen und denke, dass ich mich hier in Zukunft häufiger tummeln werde.

Danke!

Nur die besten Grüße!
Seiten: [1]

Einloggen