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.


Nachrichten - Hauke

Seiten: 1 ... 4 5 [6]
101
OS-Design / Fragen zum PMode und IDT
« am: 09. June 2005, 17:28 »
Mit dem Iret hab ich nicht gemacht, weil ich eine Dauerschleife ausführe.
Und muss man denn jetzt für die reservierten Exceptions Nullen schreiben?
Zum Code ich hab mich vertippt ich hab statt lidt lldt geschrieben, aber ein anderer Fehler war noch dar, nämlich die Falsche Offsetadressse was ich hiermit korrigiert habe

        ;vor dem PMode
mov     eax, cs
shl eax, 4


mov si, idts
mov ecx, 33
idv:
xor edx,edx
mov dx, [si]
cmp dx, 0
je son
add edx, eax
mov [si], dx
add si, 6
shr edx, 16
mov [si], dx
inc si
inc si
loop idv
jmp schl
son:
add si, 8
loop idv
schl:

Aber wenn ich einen Fehler produziere, stürzt der Rechner ab, statt  in die Dauerschleife.
Was ist den noch Falsch? :?:
102
OS-Design / Fragen zum PMode und IDT
« am: 08. June 2005, 10:35 »
Ich hab noch ein paar Fragen zum ProtectMode einmal gibt es Speicheradressen, die reserviert sind (mit Ausnahme vom Videospeicher und dem Stack), wie im RealMode z. B. die Interrupt verctor tabel. Und jetzt noch eine Frage zu der IDT. Mann muss doch eine Routine Programmieren für die Exceptions 0-19. 20 - 31  sind doch reserviert also Nullen eintragen.
Und ein Int 32 Programmiert. Jetzt darf man doch "sti" machen und Int 32 aufrufen, nur bleibt er hängen und ich weiß nicht warum.

So sehen wichtige abschnitte meines Codes aus
sCODE equ 1000b
%macro makeIDT 3
                dw %1
                dw %2
                db 0
                db %3
                dw 0
    %endmacro


idts:
makeIDT IRQ_00, sCODE, 10001110b
                makeIDT IRQ_01, sCODE, 10001110b
                makeIDT IRQ_02, sCODE, 10001110b
                makeIDT IRQ_03, sCODE, 10001110b
                makeIDT IRQ_04, sCODE, 10001110b
                makeIDT IRQ_05, sCODE, 10001110b
                makeIDT IRQ_06, sCODE, 10001110b
                makeIDT IRQ_07, sCODE, 10001110b
                makeIDT IRQ_08, sCODE, 10001110b
                makeIDT IRQ_09, sCODE, 10001110b
                makeIDT IRQ_10, sCODE, 10001110b
                makeIDT IRQ_11, sCODE, 10001110b
                makeIDT IRQ_12, sCODE, 10001110b
                makeIDT IRQ_13, sCODE, 10001110b
                makeIDT IRQ_14, sCODE, 10001110b
                makeIDT 0,0,0
                makeIDT IRQ_16, sCODE, 10001110b
                makeIDT IRQ_17, sCODE, 10001110b
                makeIDT IRQ_18, sCODE, 10001110b
                makeIDT IRQ_19, sCODE, 10001110b
                makeIDT 0,0,0
                makeIDT 0,0,0
                makeIDT 0,0,0
                makeIDT 0,0,0
                makeIDT 0,0,0
                makeIDT 0,0,0
                makeIDT 0,0,0
                makeIDT 0,0,0
                makeIDT 0,0,0
                makeIDT 0,0,0
                makeIDT 0,0,0
                makeIDT 0,0,0
                makeIDT IRQ_32, sCODE, 10001110b




idt:
Limiti dw 0
Basei dd 0


mov eax, cs ;Startadresse der IDT errechnen
shl eax, 4
add eax, idts
mov [Basei], eax


mov [Limiti], word idt - idts -1
lldt [idt]



IRQ_00:
xor al, al
jmp irqA

IRQ_01:
mov al, 1
jmp irqA

IRQ_02:
mov al, 2
jmp irqA

IRQ_03:
mov al, 3
jmp irqA

IRQ_04:
mov al, 4
jmp irqA

IRQ_05:
mov al, 5
jmp irqA

IRQ_06:
mov al, 6
jmp irqA

IRQ_07:
mov al, 7
jmp irqA

IRQ_08:
mov al, 8
jmp irqA

IRQ_09:
mov al, 9
jmp irqA

IRQ_10:
mov al, 10
jmp irqA

IRQ_11:
mov al, 11
jmp irqA

IRQ_12:
mov al, 12
jmp irqA

IRQ_13:
mov al, 13
jmp irqA

IRQ_14:
mov al, 14
jmp irqA

IRQ_16:
mov al, 16
jmp irqA

IRQ_17:
mov al, 17
jmp irqA

IRQ_18:
mov al, 18
jmp irqA

IRQ_19:
mov al, 19
jmp irqA

IRQ_32:
xor si, si
mov ax,3
shl eax, 3
mov ds, ax
mov cl, 'h'
mov [si],cl
inc si
inc si
mov cl, 'a'
mov [si],cl
inc si
inc si
mov cl, 'l'
mov [si],cl
inc si
inc si
mov cl, 'l'
mov [si],cl
inc si
inc si
mov cl, 'o'
mov [si],cl
inc si
inc si
h:
xor si, si
jmp h

irqA:
xor si, si
mov cl, al
mov ax,3
shl eax, 3
mov ds, ax
mov [si],cl
jmp irqA


(Der Selektor DS zeigt auf einen Video Deskreptator)

Und dann rufe ich Int 32 auf und nur der Cursor blinkt. :?:
103
Lowlevel-Coding / Tastatur LEDs
« am: 01. June 2005, 16:44 »
Was ist genau das Acknowledge vom Keyboardcontroller?:?:  (Gehört habe ich es schon mal, aber ich kann es nicht richtig einordnen) Aber eigentlich ist das der Gesamte Code.
104
Lowlevel-Coding / Tastatur LEDs
« am: 27. May 2005, 15:18 »
Ich habe einen „kleinen“ Tastaturtreiber geschrieben, in dem ich Tastendrücke verarbeiten kann. Nun wollte ich die LEDs programmieren jedoch funktionier das irgendwie nicht.

jmp anf
;;;;;;;;;;;;;;;;
TaSt db 2 ;Num LED ist standartmäßig eingeschaltet

anf:
mov dx, 0x64
in al, dx
and al, 1    
cmp al, 0
je anf
mov dx, 0x60
in al, dx
cmp al, 0xC5
je num
jmp anf

num:
mov dx, 0x64
in al, dx
and al, 1
cmp al, 0
jne anf

mov cx, 0x200
warte2:       ;augenblick waren
loop warte2

mov dx, 0x60
mov al, 0xED
out dx, al
mov al, [TaSt]

mov cx, 0x200
warte1:      ;augenblick waren
loop warte1

xor al, 0x2 ;Num LED setzen oder nicht setzen
out dx, al  
mov [TaSt], al


mov cl, '0'
mov si, 8
add cl, al
mov [si],cl  ;gucken ob er bis hier gekommen ist
in al, dx
jmp anf



Vorher wird in den ProtectMode geschaltet.
Der Selektor Ds zeigt auf einen Videodeskriptor.


Nach dem Ausführen passier folgendes:
Nach dem ich die "Num" Taste gerückt habe dauert es ein bisschen. (Warum weiß ich nicht, bei den nächsten drücken auf die Num Taste dauert es fast keine Zeit vielleicht 1ms oder so)
Auf dem Bildschirm erscheint nun ein R und eine Zeile Darunter und mehrere Spalten rechts ein (") Anführungszeichen obwohl statt ein R eine null da sein sollte und das LED leuchtet weiter nachdem ich die Num Taste noch mal drücke steht ein P statt einem R und kein (") und bei dem ED regt sich nichts. Warum funktioniert dieser Code nicht? :?:
105
Lowlevel-Coding / Tastaturtreiber
« am: 16. May 2005, 15:17 »
Ich wollte ein Treiber für die Tastatur, anhand der Ports, programmieren. So hab ich herausgefunden, dass Port 60h für die Scanncodes da sind und, dass man diesen Port nur auslesen soll, wenn Bit 1 des Portes 64h eins ist. Aber wenn ich dieses überprüfe, wird nur eine 0 herausgegeben obwohl ich eine Taste gedrückt habe. Dasselbe passiert beim auslesen vor Port 60h mit Ausnahme, dass 0 und 255 zurückgegeben wird.

So sieht in etwa mein Code aus.
mov ax, 3
int 10h
mov ax, 0xb800
mov ds, ax
xor si, si ;si null setzen
anf:
mov dx, 0x64
in al, dx
and al, 2
cmp al, 0
je anf
mov dx, 0x60
in al, dx
cmp al, 0x1E ;Scancode für 'A'
jne anf
mov cl, 'a'
mov [si], cl
inc si
inc si
cmp si, 4000
jne anf
xor si, si
jmp anf

Worin legt das Problem?  :?:
106
Lowlevel-Coding / Problem mit Protect Mode
« am: 14. May 2005, 15:08 »
Oh nein, das war der Fehler. Das ist mir gar nicht aufgefallen. Der Teufel steckt halt im Detail.

Trotzdem vielen Dank.
107
Lowlevel-Coding / Problem mit Protect Mode
« am: 14. May 2005, 12:24 »
Der Deskriptor ist glaub ich richtig gesetzt ich gehe ihn noch einmal durch

Die Größe soll 2 Videoseiten im 3. Textmodus sein also 25x80x2x2=8000=1F40h also:
dw       0x1F40
Die Offsetadresse ist B8000h also
dw       8000
und Bit 16-23 dann:
db       0xB
Und dann im Speicher vorhanden 1. Privilegstufe, Speichersegement Segementtype 1 (Lesen + Schreichen) und das letzte Bit wird doch vom Prozessor gesetzt also egal ob 1 oder 0 ergibt:
db       10110010b
und das letzte Word insgesamt dann 0
dw       0

Und der Cursor blinkt nur. und macht nichts weiteres.
108
Lowlevel-Coding / Problem mit Protect Mode
« am: 13. May 2005, 17:51 »
Ich hab mich mit dem Protect Mode schon etwas länger theoretisch befasst aber was ich Programmier habe funktioniert nicht. So habe ich das Tutorial, welches auf dieser Seite zu lesen ist, etwas Modifiziert,  aber das funktioniert auch nicht. Es ist nur ein blinkender Curser zu sehen.

Hier die Modifizierungen:

Ein weiterer Diskriptator für den Videospeicher:
dk3:
dw 0x1F40
dw 8000
db 0xB
db 10110010b
dw 0


für den Video Modus:
start:
mov ax,3
int 0x10

cli


und dieser Code um „hallo“ auszugeben:
END:
mov ax, 3
shl eax, 3
mov ds, ax
xor si,si
mov al, 'h'
mov [si],al
inc si
mov al, 7
mov [si],al
inc si
mov al, 'a'
mov [si],al
inc si
inc si
mov al, 'l'
mov [si],al
inc si
inc si
mov [si],al
inc si
inc si
mov al, 'o'
mov [si],al
inc si
inc si
h:
xor ax,ax
jmp h


Warum funktionier diese Modifizierung nicht?
109
Lowlevel-Coding / Maus Treiber
« am: 27. January 2005, 17:04 »
Tut mir Leid aber dass hilft mir auch nicht weiter.
Auf dieser Seite wird Int 33h benutzt, soweit ich dass sehen  kann.
(falls ich mich irre bitte melden.)
110
Lowlevel-Coding / Maus Treiber
« am: 26. January 2005, 11:47 »
Das ist mir noch nicht ganz ersichtlich geworden.
Wie mach ich das nun beim PS/2 Anschluss? :?:
Welche Portadresse ?  :?:
111
Lowlevel-Coding / Maus Treiber
« am: 25. January 2005, 15:34 »
Da man bei einem OS ohne Dos Unterstützung die Ints 21h wie 33h der Maus Interrupt, nicht benutzen kann muss man diese selbst Programmieren. (Ich spiele dabei auf Int 33h an).
Jetzt zu meiner Frage: Wie mache ich dass.
Ich weiß, dass man mit dem Befehl In arbeiten muss, aber mit welcher Port Adresse.
Kann mir da irgend wehr weiter helfen? :?:
112
Lowlevel-Coding / fragen zur FAT12 und zu Dos Inerrupt.
« am: 07. October 2004, 13:14 »
Mit den Dos Inerrupts ist das dann ja geklärt und mit dem Root Directory wohl leider auch, wenn keiner etwas über lange Pfadnamen weiß. Aber bei der FAT Tabelle verstehe ich noch etwas nicht nämlich dort steht, dass die txt Datei 03F Anfängt, dass ist aber nicht wahr, denn die txt Datei fängt im erst
möglichen Sektor an also 003 oder wie hat man das zu deuten?
113
Lowlevel-Coding / fragen zur FAT12 und zu Dos Inerrupt.
« am: 06. October 2004, 16:27 »
Zu erst einmal eine Frage in Bezug auf die Dos Inerrupts. Bedeuten die Dos Inerrupts dass diese Inerrupts Dos brauchen oder was bedeuten sie? Und jetzt eine Frage zu einem Dos Inerrupt nämlich 39h (mit dem man Unterverzeichnisse erstellen kann). Was bedeutet Adresse ASCII Pfadname bedeutet es "A:\Test\" um Test zu erstellen oder was bedeutet es. (Im Klartext wie erstelle ich einen Unterordner) und mit welcher Datei kann ich Dateien erstellen z. B. eine txt Datei.


Und jetzt noch eine Frage zum Fat12 Dateisystem

Zum Testen habe ich auf eine Formatierte Diskette mit Label Beschriftung "Hauke". Ich habe auf der Diskette eine 860 Byte große txt Datei gespeichert mit Name "Super Text.txt". In der FAT Tabelle steht dann das aus dem ich nicht schlau werde. Erst einmal sind hier 4 einträge obwohl doch nur 2 sein dürften und die anderen Werte ergeben für mich irgendwie keinen Sinn.


F0 FF FF 03 F0 FF 00   (Adresse 0200h oder 1400h)


Und dann noch zum Root Directory.
Warum sind hir 4 Einträge. Der erste Eintrag ist doch der "Haupt Order" also "A:\" und der letzte Eintrag ist doch für die txt Datei was dazwischen ist weiß ich nicht was das bedeuten soll. Hängt es vielleicht mit der Länge des Dateinamen zusammen?


(In Hex) (Adresse 2600h)
48 41 55 4B 45 20 20 20  20 20 20 08 00 00 00 00
00 00 00 00 00 00 2A 6A 46 31 00 00 00 00 00 00
42 74 00 00 00 FF FF FF FF FF FF 0F 00 67 FF FF
FF FF FF FF FF FF FF FF FF FF 00 00 FF FF FF FF
01 53 00 75 00 70 00 65 00 72 00 0F 00 67 20 00
54 00 65 00 78 00 74 00 2E 00 00 00 74 00 78 00
53 55 50 45 52 54 7E 31 54 58 54 20 00 9D 42 6B
46 31 46 31 00 00 2F 6B 46 31 02 00 5C 03 00 00

(In ASII nicht komplett)
HAUKE      

Bt
ÿÿÿÿÿÿÿÿÿÿ
S
T
SUPERT~1TXT
F1F1
Seiten: 1 ... 4 5 [6]

Einloggen