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

Seiten: 1 ... 76 77 [78] 79 80 81
1541
Lowlevel-Coding / Software-INT
« am: 07. April 2005, 14:47 »
Zitat
Werden bei einem Software-Interrupt die Register nicht verändert?

Der Unterschied zwischen Hardware-Interrupt und Software-Interrupt ist die Art des Aufrufens und nicht ob Register geändert werden oder nicht. Die Register muss der ISR-Programmierer (also du) immer selbst sichern. Du musst also deine ISR so anpassen, dass die Register auf den Stack gepusht werden, bevor du sie veränderst. Vor dem iret musst du dann wieder alle Register vom Stack laden. Wenn du die Register vorher verändern willst, geht das am einfachsten, in dem du den Stack manipulierst.
mov [esp+das_offset_von_dem_register_auf_dem_stack], wert_der_ins_register_soll
Das Offset musst du selbst ausrechnen, je nachdem was du wann pusht.

far-pointer auf den stack legen:
mov ax, segment (z.b. cs, ds, es oder irgendeine eine zahl ...)
push ax
mov di, offset
push di


und far-pointer vom stack laden:
pop ax ; segment laden
mov ds, ax
pop di ; offset laden
1542
Offtopic / tar und gzip doku
« am: 05. April 2005, 20:04 »
wenn du gzip in dein OS/Programm implementieren willst solltest du dir evtl. mal zlib anschauen. oder das dazugehörige RFC.
1543
Lowlevel-Coding / PMode-JMP
« am: 05. April 2005, 19:55 »
wenn es ein bootsektor ist, muss am anfang org 0x7c00 stehen, weil du DS und ES auf 0 setzt. (denn sonst kopierst du die GDT statt von 0x0000:0x7CXX von 0x0000:0x00XX)

das limit deiner GDTR ist außerdem zu groß. es muss den wert (anzahl_der_selektoren * 8) - 1 haben. (8 =größe eines selektors)

du kopierst deinen kernel an eine adresse mit einer ungeraden mbyte zahl (d.h. bit 20 ist gesetzt). vorher solltest du das A20 setzen, sonst landet dein kernel wenn du ihn nach 0x00100000 kopierst bei 0x00000000 ...

sei außerdem vorsichtig mit den basen in deinen selektoren. ich rate davon ab, basen ungleich 0 zu nehmen, weil das alles sonst sehr kompliziert zu überschauen ist und schwer zu debuggen.

btw: im real mode kannst du außerdem esi und edi (und alle anderen 32bit register) nicht zur adressierung nutzen. gibt afaik irgendne exception ... du musst dich mit den unteren 16 bit begnügen. (du addressierst zwar nicht sondern weist nur werte zu, aber lass dich nicht hinreissen mit 32bit zu adressieren ...)
1544
Das Wiki / Wird es Lowlevel als Magazin noch geben?
« am: 01. April 2005, 23:28 »
Zitat von: Roshl
ich musste die disc jedesmal vorher formatieren weil windows sonst die FAT und das RD zerhauen hat, weiss der Fuchs warum.

vielleicht irgendwelche backuptabellen der alten FAT, die windows für echt hält? (nur eine vermutung, bin kein FAT-experte ...)
1545
Lowlevel-Coding / in den kernel wechseln
« am: 01. April 2005, 19:18 »
ich denke mal an solchem code erkennt man den grad der 1337ness des coders ;)
1546
Lowlevel-Coding / in den kernel wechseln
« am: 01. April 2005, 18:26 »
Wahrscheinlich von einem uralten Tutorial abgeguckt und nur eine Angewohnheit. Meine Vermutung ist, dass es früher mal Assembler gab, die Zahlenwerte in jmp-Statements nicht angenommen haben, und der Workaround mit dem retf hat sich bei einigen "alten Hasen" vielleicht eingeschliffen.
1547
Lowlevel-Coding / in den kernel wechseln
« am: 01. April 2005, 18:17 »
ich frage mich bloß, warum man sowas tut. ist es zu schwer sowas zu schreiben?
jmp 0x1000:0000
kommt aufs gleicher heraus, ist kürzer, übersichtlicher, verständlicher (sieht man ja wie einsteigerfreundlich das ist) und einfacher zu debuggen.
1548
Lowlevel-Coding / Hilfe bei Bootloader
« am: 01. April 2005, 12:36 »
ich vermute ds (und es) sind nicht korrekt gesetzt. du solltest sie noch mit 0 initialisieren.

xor ax, ax
mov ds, ax
mov es, ax


edit: blueXseven, ich war schneller :P ;)
1549
Lowlevel-Coding / FDD
« am: 31. March 2005, 17:34 »
... oder die PIC-Masken sind falsch gesetzt oder du hast den falschen Interrupt gehookt ...
1550
Das Wiki / Community-OS
« am: 31. March 2005, 17:32 »
Jupp seh ich auch so. Wobei die Community nicht vollständig ausgeschlossen werden sollte. Heisst ja "Community OS" ...

Wichtig finde ich auch, dass alle Meilensteine zum Download zur Verfügung stehen. Also z.B. (ich fantasier einfach mal): Version 0.01 - Protected Mode; Version 0.02 - Paging; Version 0.03 - Memory Management, usw ... Und dann immer schön dokumentieren was geändert wurde. So wäre es für Neu- und Quereinsteiger am einfachsten die Entwicklung mitzuverfolgen und aus der Entwicklung zu lernen. Sonst passiert das gleiche wie mit dem Linuxkernel: Nur wenige Personen haben überhaupt einen relativ vollständigen Plan davon, was wo im Kernel ist.
1551
Offtopic / Fehler in Forum!
« am: 28. March 2005, 22:33 »
also ich weiss nicht was ihr habt. soweit ich weiß ist gibt es in der aktuellen 2.0.13 keine sicherheitslücken. man muss das phpBB genau wie jedes andere forum einfach nur regelmäßig updaten.
1552
OS-Design / String Klasse
« am: 28. March 2005, 13:53 »
Hi,

ich würde anstatt den Puffer immer um 1 Byte zu vergrößern, eher größere Schritte (min. 100 Byte. Vielleicht sogar ganzes Pages, also 4096 Byte. Natürlich nur im PM mit Paging aktiviert ... ) nehmen. Damit gleichst du den meisten Zeitverlust beim anhängen wieder aus. Ist halt ein bisschen zusätzlicher Verwaltungsaufwand, aber ich denke der Geschwindigkeitsgewinn gleicht das wieder aus. Bei der STL-Klasse std::string ist das AFAIK standarisiert und da wird das auch so gemacht. (Wenn ich da jetzt mal nichts verwechsle ...)

PorkChicken
1553
Lowlevel-Coding / AMD Versteht nur den Bootloader
« am: 27. March 2005, 16:36 »
um genau zu sein: int 0x10, ah = 0x0E und soweit ich weiss kann das jedes bios seit 1981 ...

an einen invalid opcode glaub ich nicht. sooo alt ist der AMD Duron auch nicht und wenn du SSE im bootloader verwendest, sollte dir das bewusst sein. ich vermute das problem eher bei solchen sachen wie zugriff auf die diskette, überprüfen der CPU mit CPUID oder das einschalten des a20 gates.

Zitat
bei dem AMD Duron führt er nur den Bootcode aus und bleibt einfach stehen

versuch mal herauszufinden wo genau er stehen bleibt. lass den computer an bestimmen stellen ein bestimmtes zeichen auf dem schirm ausgeben, wenn er dort angekommen ist.

z.B. sowas (hab ich jetzt aus dem kopf geschrieben und nicht getestet):
RM:
mov ax, 0xB800
mov es, ax
es: mov word [0], 'xx'

oder im PM
mov word [0x000B8000], 'xx'

für genaueres müsstest du den code posten ...
1554
Lowlevel-Coding / UTF-8 im Kernel
« am: 26. March 2005, 21:11 »
also theoretisch kannst du auch weniger Byte reservieren, musst du halt anhand des ersten Bytes dynamisch entscheiden. Aber ich würde eh 4 Byte für ein einzelnes Zeichen empfehlen, da es einfacher und eigentlich egal ist ob du nun 3 Byte zu viel reservierst oder nicht und du eigentlich nicht soviele einzelne zeichen hast, die du speichern müsstest, oder? besser als UTF-16/32 oder UCS-2/4 ist es allemal ...
1555
OS-Design / Re: scheduling verstaendnisfrage
« am: 25. March 2005, 00:10 »
Zitat von: freeka
auf nem singleprocessor system laeuft process A. dieser process will speicher. er wechselt von userspace in kernelspace (das sag ich jetz einfach mal so, obwohl ich nicht verstehe wie das geht und worin dieser wechsel besteht),

Das macht man über einen Interrupt, genauer gesagt ein Gate (glaub ich). Wenn man diesen Interrupt (unter Linux ist es AFAIK Int 0x80) aufruft, wird einfach in den Kernel gesprungen und der Kernelcode ausgeführt. Ein paar Register wie z.B. die Segmentregister, der Stackpointer und die Flags werden vorher durch den Interruptbefehl noch geändert. In den Flags wird z.B. der Privilege Level 0 (PL0) eingestellt, d.h. der Code ist auf höchster Ebene, dem Kernel Mode. (Vorher war er PL3, also User Mode.) PL0 erlaubt die Ausführung spezieller Befehle, die im PM für einen Kernel halt wichtig sind und besser nicht von User Mode Programmen aus Sicherheitsgründen ausgeführt werden dürfen (daher das "Protected" in PM) und dort auch mit einem General Protection Fault (oder Invalid Opcode) bestraft werden.

Mit dem Scheduler hat das eigentlich nichts zu tun. Solche syscalls kann man auch in einem Monotasking-System implementieren.
1556
Lowlevel-Coding / Problem mit GCC Inline Assembly
« am: 22. March 2005, 19:39 »
mov cs, irgendwas gibt es nicht. da musst du schon einen jmp, call, ret, etc. nehmen

Zitat von: Another Stupid Coder
Hat vielleicht jemand ein gutes Inline-ASM tut?


http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
1557
Lowlevel-Coding / Problem mit GCC Inline Assembly
« am: 22. March 2005, 14:13 »
IIRC musst du statt "push" und "pop" "pushw" bzw "popw" schreiben.
1558
Lowlevel-Coding / A20
« am: 22. March 2005, 14:11 »
hm ja hab ich auch ein bisschen überlegt, aber dann ist mir eingefallen, dass das A20-Gate ja ein Dings ist, das dafür sorgt, dass das Bit 20 auf 0 bleibt. und wenn man es deaktiviert, kann man den ganzen speicher addressieren.

aber ich will jetzt nicht behaupten, dass dies die offizielle interpretation ist ...

edit: hmm laut google heisst es wirklich "enable" nicht "disable" oder "deaktivieren" oder ähnliches ... naja mal wieder was dazu gelernt
1559
Lowlevel-Coding / A20
« am: 22. March 2005, 11:14 »
ich würde das A20 erst im Kernel deaktivieren. (theoretisch, denn ich habs bisher noch nie deaktiviert. war zu faul...) ist ja kein ding, wenn man aufpasst, dass man auf keine speicheraddresse zugreift, die ungerade mbyte zahlen hat (also bei der bit 20 gesetzt ist).

ich würde auch den code aus dem linux kernel verwenden.
1560
Lowlevel-Coding / Keyboard: IRQ vs. Nicht IRQ
« am: 21. March 2005, 20:52 »
auf der projekt seite gibts nen richtigen download: http://sourceforge.net/projects/gazos/
Seiten: 1 ... 76 77 [78] 79 80 81

Einloggen