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 - bitmaster

Seiten: 1 ... 53 54 [55] 56 57
1081
Lowlevel-Coding / [Anfänger] Keine Ausgabe
« am: 08. November 2005, 21:50 »
Zitat von: PorkChicken
aber cs ist nicht unbedingt null
Hä? das habe ich ja noch nie gehört. Beim starten ist cs doch immer NULL oder nicht?
1082
Lowlevel-Coding / [Anfänger] Keine Ausgabe
« am: 08. November 2005, 17:11 »
Ach ja noch etwas:

mov ax,0F000h
mov ss,ax
mov sp,0


Du darfst keine Daten/Code an dieser Adresse schreiben. Dort befindet sich die ROM. Versuche es mal so:

mov ax,0100h
mov ss,ax
mov sp,6C00h


Das müsste funktionieren.

EDIT: Ich habe noch was gefunden. Du musst glaube ich das Datensegment erst setzten. Mache das mal so:

cli
mov ax,cs
mov ds,ax
mov ax,0100h
mov ss,ax
mov sp,6C00h
sti

Und ändere "sag" so ab (also "or al,al jz ende" direkt unter lodsb)

sag:
lodsb
or al,al
jz ende
mov ah,0Eh
mov bx,07h
int 010h
jmp sag

Hoffe das es jetzt funktioniert.
1083
Lowlevel-Coding / [Anfänger] Keine Ausgabe
« am: 08. November 2005, 17:05 »
Also ich glaube das ich deinen Fehler gefunden habe. Hier ist er:

sti
ausgabe db "boot gut",13,10,0
mov si,ausgabe


Das kann nicht funktionieren. Die CPU soll doch nicht den Code von "boot gut" ausgeben. Das macht sie aber in diesem fall. Was daraus wird weis keiner so genau. So müsste es aussehen:

sti
jmp weiter
ausgabe db "boot gut",13,10,0
weiter:
mov si,ausgabe


Jetzt überspring er nämlich die Meldung. Ich würde die Meldung aber nach ganz unten setzten dann kannst du dir das überspringen ersparen (natürlich vor times 512 blabla, aber unter jmp ende).
1084
Lowlevel-Coding / Textausgabe im PMODE??
« am: 04. November 2005, 22:44 »
Zitat von: RedEagle
Hab noch nen Problem mit den Grafikmodus:
setscreenservice:
   xor ax, ax   ; ax löschen
   mov ah, 0x00 ; Funktion 00 -> Set video mode and clear screen
   mov al, 0x12 ;  Einstellung
   int 0x10     ; Screen servive aufrufen
   ret
Sorry wenn ich jetzt vom Thema abkomme aber der Code sieht so hässlich aus. Wieso löscht du ax vorher wenn du es sowieso neu beschreibst. Und dann nochmal ah auf Null zu setzten ist doch blöd. Also ich würde deinen Code durch diesen ersetzen:

setscreenservice:
mov ax,0x12 ;ah = Null und al = 12h
int 0x10
ret
Dieser Code mag zwar vom aussehen oder Geschwindigkeit nichts verändern (zumindest nicht viel) aber wenn man schon mit Assembler programmiert dann sollte man auch auf einen sauberen und schönen Code achten.
1085
Offtopic / dos interrupts problem
« am: 04. November 2005, 07:38 »
Zitat von: SSJ7Gohan
Unter Linux ist Assemblerprogrammierung auch wesentlich angenehmer als unter Windows/DOS.
Hä? Das finde ich überhaupt nicht so.

Zitat von: SSJ7Gohan
Für den OS rate ich dir aber ab, BIOS Interrupts zu nutzen, ich würde dir empfehlen deine Treiber selbst zu schreiben, da BIOS Interrupts u.a. im Protected Mode nicht funktionieren und meißt auch nicht so sehr gute Lösungen sind. Im Bootloader muss man sie natürlich benutzen, aber sobald du im Protected Mode bist, brauchst du sie eigentlich nicht mehr, ausser für spezielle Sachen wie VESA.
Da hast du natürlich recht. Aber wie du schon sagtest im Bootloader bzw. Bootsrap braucht man diese. Deswegen fürde ich schon mal reinschauen wie diese funktioniere. Tja, und danach halt Ports etc.
1086
Offtopic / dos interrupts problem
« am: 03. November 2005, 21:06 »
Tja dieses Buch beschäftigt sich halt mir der Assemblerprogrammierung unter DOS. Kaufe dir Das Assembler Buch von Addison-Wesley. Dort wird eine Masse beschrieben, auch was für ein OS schreiben notwendig ist. Dieses Buch geht nicht auf Programme für ein spezielles OS schreiben ein, sondern erklährt die CPU Befehle, Register, Speicherverwaltung etc. Also genau das was man für eine OS-Entwicklung brauch. Also ich kann es dir nur empfehlen. Und was die interrupts betrifft. Die sind OS abhängig. Nur die BIOS-Interrupts kannst du nutzen, weil die nicht OS abhängig sind. Schaue mal hier: http://www.tu-chemnitz.de/informatik/HomePages/RA/lehre/mop/dos_stuff dort werden die BIOS-Interrupts erklährt.
1087
Offtopic / Hosen runter! Zeigt eure OS ;)
« am: 02. November 2005, 18:14 »
Hi alle zusammen. Ich habe gerade die Beta-Version von meinem OS fertig bekommen und diese auf meine Webseite zum Download angeboten. Also alle die Interesse haben einfach mal herunterladen und schauen wie es so ist. Das Gästebuch und die Feedbackfunktionen funktionieren auch. Meine Webseite lautet: http://www.osm-page.de

OS/M Master
1088
Lowlevel-Coding / Real Time Clock - Komische werte
« am: 01. November 2005, 10:12 »
Standardmäßig werden BCD Zahlen ausgegeben. Vielleicht liegt es daran. Dort gibt es dann zwei Möglichkeiten. Du ließt die BCD Zahlen aus und wandelst die entsprechend um. Oder du deaktiviert im Statusregister B das DM (Datenmodus) Bit. Dann sind die Zahlen binär. Gute Erklärungen findest du im PC-Hardwarebuch. In der Auflabe 7 findest du es ab Seite 658. Hoffe dir damit geholfen zu haben.
1089
Lowlevel-Coding / booten funktioniert nicht - newbie-fragen
« am: 31. October 2005, 14:09 »
Zitat von: nore
jap. wie gesagt, ich hab den code komplett aus lowlevel ausgabe 1.

oder warte mal... ist das schlimm, wenn ich anstelle von
dw 0AA55h ; dem hier
dw 0x0AA55 ; dieses hier geschrieben habe?
Nein, das ist egal. h und 0x stehen beide für Hexadezimal.
1090
Lowlevel-Coding / Fragen zum P-Mode und der IDT
« am: 31. October 2005, 07:33 »
Zitat von: nooooooooos
B.)Wie kann ich einen Interrupt (z.B Timer Interrupt) maskieren. Ich hab das schon ein paar mal gelesen und frage mich, wie man einen Interrupt ausschalten kann?
Also mit den Befehl cli werden alle interrupt deaktiviert und mit sti alle wieder aktiviert. Wenn du die IRQ's deaktivieren willst dann musst du die Ports 21h für Master PIC und A1h für Slave PIC nutzen. Wenn du das Bit setzt dann ist der IRQ maskiert sprich deaktiviert. Hier mal ein Beispiel:

Du möchtest den IRQ1 (Tastatur) deaktivieren aber alle anderen aktivieren:

mov al,00000010b ;set bit 1 in Port 21h
out 21h,al
xor al,al
out A1h,al

Das heißt die IRQ's 0-7 kannst du mit 21h ansprechen und die IRQ's 8-15 mit dem A1h. Müsste so funktionieren. Habe das jetzt nicht getestet aber bin mir eigentlich sicher das das richtig ist.
1091
Lowlevel-Coding / Maustreiber schreiben.
« am: 28. October 2005, 23:42 »
So da bin ich wieder. Ich habe den Code zum aktivieren der PS/2-Maus noch etwas optimiert und in meinem OS integriert. Alles funktioniert wunderbar. Der erste Parameter der Maus gibt ja an welche Taste gedrückt oder nicht gedrückt wurde. Das funktioniert auch wunderbar. Jetzt habe ich aber eine Frage wie das mit dem zweiten und dritten Parameter funktioniert. Die sollen ja die Bewegung der Maus beinhalten (zweiter = x-Achse und dritter = y-Achse). Aber was genau beinhalten sie dann? Die zahlen gehen doch von -128 bis +128 oder? Ich habe mir die mal ausgeben lassen. Wenn ich die Maus ein ganz kleines Stück nach rechts bewege bekommt der zweite Parameter eine 1 und der dritte eine Null. Wenn ich die Maus ein ganz kleines Stück nach links bewege bekommt der zweite Parameter eine 255 (das müssten dann eine -1 sein oder?) und der dritte eine Null. Aber was sagt die 1 mir dann? Muss ich diese an meinen Video-Modus anpassen? Wie mache ich das am besten?

Danke!!!
1092
Lowlevel-Coding / Maustreiber schreiben.
« am: 27. October 2005, 21:56 »
Zitat von: stefan2005
hi,
ja, wenn das erste Bit im Port $64 (KEYBOARD CONTROL) gesetzt ist, dann kann man vom port $60 das Byte einlesen.

mfg,
stefan
OK.

Danke!!!

PS: Melde mich bald wieder. ;-)
1093
Lowlevel-Coding / Maustreiber schreiben.
« am: 27. October 2005, 21:55 »
Zitat von: SSJ7Gohan
Ich kenn mich jetzt nich so mit der Maus aus, aber ich denke nicht, das du noch Abfragen musst, ob die Daten da sind, da der IRQ ja nur aufgerufen werden sollte, wenn welche da sind.
Ja, aber ich meine wenn ich mit in al,60h den ersten Parameter lade und da die CPU viel schneller ist als die Peripherie ob direkt schon der zweite da ist oder ob ich erst warten (prüfen) muss bis er da ist und diesen dann laden und danach den letzten.
1094
Lowlevel-Coding / Maustreiber schreiben.
« am: 27. October 2005, 19:53 »
Also bei mir läuft es überall ohne diese Zeile, auch in Bochs. Ist Bochs 2.2.1, wie das bei anderen Versionen ist weis ich nicht. Aber ich lasse diese Zeile weck. Vielen dank noch. Ach ja wenn ich die drei in al,60h in der IRQ12 Routine laufen lasse muss ich etwas berücksichtigen? Vielleicht vorher irgendwie prüfen ob die Daten überhaupt schon da sind?

Danke!!!
1095
Lowlevel-Coding / Timer Interrupt
« am: 27. October 2005, 18:24 »
Zitat von: WhiteDragon

Außerdem: Schreib mal dies hier hin:

       mov     al, 20h
        out     0a0h, al
        out     20h, al


Ist wahrscheinlich nicht die Lösung, aber probier mal...
Dies muss gemacht werden wenn der IRQ sich im slave PIC befindet. Aber der timer befindet sich im master deswegen genügt das mov al,20h out 20h,al.
1096
Lowlevel-Coding / Maustreiber schreiben.
« am: 27. October 2005, 17:09 »
Habe ich gerade unter Bochs und VMware getestet. Dort funktioniert es. Auch wenn ich den Code nicht ganz verstehe. Werde gleich mal meine PCs testen. Aber der Code kommt mir so bekannt vor. Der hat ziemlich viel änlichkeit mit folgendem Code:

kb_read:

        push    ecx edx

        mov     ecx,0xffff
      kr_loop:
        in      al,0x64
        test    al,1
        jnz     kr_ready
        loop    kr_loop
        mov     ah,1
        jmp     kr_exit
      kr_ready:
        push    ecx
        mov     ecx,32
      kr_delay:
        loop    kr_delay
        pop     ecx
        in      al,0x60
        xor     ah,ah
      kr_exit:

        pop     edx ecx

        ret


kb_write:

        push    ecx edx

        mov     dl,al
        mov     ecx,0xffff
      kw_loop1:
        in      al,0x64
        test    al,0x20
        jz      kw_ok1
        loop    kw_loop1
        mov     ah,1
        jmp     kw_exit
      kw_ok1:
        in      al,0x60
        mov     ecx,0xffff
      kw_loop:
        in      al,0x64
        test    al,2
        jz      kw_ok
        loop    kw_loop
        mov     ah,1
        jmp     kw_exit
      kw_ok:
        mov     al,dl
        out     0x60,al
        mov     ecx,0xffff
      kw_loop3:
        in      al,0x64
        test    al,2
        jz      kw_ok3
        loop    kw_loop3
        mov     ah,1
        jmp     kw_exit
      kw_ok3:
        mov     ah,8
      kw_loop4:
        mov     ecx,0xffff
      kw_loop5:
        in      al,0x64
        test    al,1
        jnz     kw_ok4
        loop    kw_loop5
        dec     ah
        jnz     kw_loop4
      kw_ok4:
        xor     ah,ah
      kw_exit:

        pop     edx ecx

        ret


kb_cmd:

        mov     ecx,0xffff
      c_wait:
        in      al,0x64
        test    al,2
        jz      c_send
        loop    c_wait
        jmp     c_error
      c_send:
        mov     al,bl
        out     0x64,al
        mov     ecx,0xffff
      c_accept:
        in      al,0x64
        test    al,2
        jz      c_ok
        loop    c_accept
      c_error:
        mov     ah,1
        jmp     c_exit
      c_ok:
        xor     ah,ah
      c_exit:
        ret


setmouse:  ; set mousepicture -pointer
           ; ps2 mouse enable

     mov     [0xf200],dword mousepointer

     cli
     mov     bl,0xa8                 ; enable mouse cmd
     call    kb_cmd
     call    kb_read                 ; read status

     mov     bl,0x20                 ; get command byte
     call    kb_cmd
     call    kb_read
     or      al,3                    ; enable interrupt
     mov     bl,0x60                 ; write command
     push    eax
     call    kb_cmd
     pop     eax
     call    kb_write

     mov     bl,0xd4                 ; for mouse
     call    kb_cmd
     mov     al,0xf4                 ; enable mouse device
     call    kb_write
     call    kb_read           ; read status return


Was soll die Zeile in der "für Bochs" steht bedeuten? Brauch Bochs eine extra Einladung?
1097
Lowlevel-Coding / Maustreiber schreiben.
« am: 26. October 2005, 20:44 »
Also irgendwie funst die Schose nicht so richtig. Beim VMware läufts ganz gut, unter Bochs gar nicht, 1. PC läuft auch nicht und beim 2. PC läuft es aber nicht so wie bei vmware. Das heißt unter VMware läufts noch am besten. Aber was mache ich falsch? Hier mein Code:


call CheckPS2
;hiermit aktiviere ich die Maus, fehlt da was?
;dies befindet sich außerhalb der IRQ12 Routine
;wird also nur einmal aufgerufen, ist das richtig?
mov al,0A8h
out 64h,al
call CheckPS2
mov al,0D4h
out 64h,al
call CheckPS2
mov al,0F4h
out 60h,al
call CheckPS2
;ende
CheckPS2:
mov dx,0FFFFh
next:
in al,64h
and al,03h
jz done
or dx,dx
jz done
in al,60h
dec dx
jmp next
done:
ret
;folgender Code ist in der IRQ12 Routine
push ax ;Register sichern
push si
push ds
push es
mov ax,cs ;für meldung muss ds gleich cs sein
mov ds,ax
mov es,ax
in al,64h
test al,20h
jz exit ;wenn nicht für Maus dann ende
in al,60h
test al,00000001b ;linke taste gedrückt?
jz nicht_linke
xor ah,ah
mov si,offset linke
int 60h ;dies gibt einfach nur die meldung linke aus (int 60h von mein os)
jmp weiter
nicht_linke:
test al,00000010b ;rechte taste gedrückt?
jz nicht_rechte
xor ah,ah
mov si,offset rechte ;meldung rechte
int 60h
jmp weiter
nicht_rechte:
test al,00000100b ;mittlere taste gedrückt?
jz weiter
xor ah,ah
mov si,offset mitte ;meldung mitte
int 60h
weiter: ;der rest x und y bewegung der maus, für später
in al,60h
in al,60h
;
xor ah,ah
mov si,offset msg ;eine meldung ausgeben, wenn nur diese
int 60h ;ausgegeben wird dann wurde keine taste gedrückt
;
exit:
mov al,20h ;sende EOI (end of interrupt)
out 0A0h,al ;schalte slave frei
out 20h,al ;schalte master frei
pop es
pop ds
pop si
pop ax
iret ;zurück


Der Code soll folgendes bewirken. Er soll die PS/2-Maus aktivieren (nur einmal also außerhalb von der IRQ12-Routine). In der Routine soll er prüfen welche taste gedrückt wurde und dann die jeweilige Meldung ausgeben + msg-Meldung. Wenn keine Taste gedrückt wurde dann soll er nur die msg-Meldung ausgeben. Die letzten beiden Parameter für x und y Achse (Verschiebung der maus) werden erst einmal nicht berücksichtigt. Zum Schluss der EOI und zurück. Der Code soll einfach nur ausgeben welche Taste gedrückt wurde (stört euch nicht an den int 60h das ist einfach der int von meinem os und ah = Null bedeutet Meldung ausgeben. Das alles funktioniert unter VMware genau so. Aber und Bochs funst nichts und unter einem PC von mir auch nicht. Der andere PC funktioniert damit fast er gibt nur beim verschieben auch die Meldungen für recht, links, mittel aus obwohl ich keine Taste drücke. Was ist an diesem Code falsch? Ist das aktivieren der Maus richtig? Was muss ich ändern?

Danke!!!

PS: stefan2005 du sagtest du hast deinen Maustreiber fertig könntest du mir vielleicht sagen wie du die Maus aktiviert hast und was du im IRQ12 stehen hast? Danke!!!
1098
Offtopic / Hosen runter! Zeigt eure OS ;)
« am: 26. October 2005, 13:05 »
Folgende Meldung erhalte ich:

<meta http-equiv="refresh" content="0;url=./gb/guestbox.php>
1099
Lowlevel-Coding / Maustreiber schreiben.
« am: 26. October 2005, 07:30 »
Habe herrausgefunden das mein Programm nicht auf allen PCs funktioniert. Ich weis aber nicht warum. Ich habe gelesen das es im Kontroller-Register 2 Bits gibt die dafür zuständig sind IRQs aufzurufen. Meine Fragen sind: Sind die vielleicht bei der Maus nicht bei allen PCs standartmäßig gesetzt? Und wie setze ich diese? Folgendes habe ich nämlich im Internet gefunden:

Kontroll-Register:

- XLAT _EN2 _EN - SYS INT2 INT


INT
bei neuen Daten von der Tastatur wird Interrupt 1 ausgelöst
INT2
bei neuen Daten von der Maus wird Interrupt 12 ausgelöst


Schonmal danke!!!
1100
Lowlevel-Coding / Maustreiber schreiben.
« am: 25. October 2005, 22:17 »
Zitat von: stefan2005
(hab vor paar minuten selbst erst meinen Maustreiber vollendet :D)
Das ist ja cool. Vielen dank ich werde das morgen ausprobieren, weil ich jetzt schlafen gehe.

PS: nochmals vielen dank
Seiten: 1 ... 53 54 [55] 56 57

Einloggen