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 - scales of justice

Seiten: [1] 2
1
Lowlevel-Coding / ld soll standardlibrarys benutzen
« am: 23. July 2006, 16:51 »
ich Linke meinen Kernel mit ld,
nun meckert ld aber über fehlende Funktionen:
memcpy, memset, usw.

alles Zeug aus den Standardlibrarys

ich steuer ld per Linkerscript,
wie sag ich ihm nun dass er die Standardlibrarys einbinden soll?
kann doch nicht sein, dass ich jeden Library Namen in dem Script eintragen muss

und dafür müsst ich auch erstmal wissen wo die Librarys überhaupt sind,
ich kann nur ne Menge Header Dateien finden

(ich red jetzt von Linux, unter Windows waren die einfach im gleichen Verzeichnis im lib Ordner, und er hat sie automatisch eingebunden)
2
Lowlevel-Coding / merkwürdiges Problem mit A20-Gate
« am: 22. July 2006, 15:48 »
diesmal hab ich ein wirklich merkwürdiges Problem mit dem A20-Gate:
wenn ich einfach nur das A20-Gate aktiviere, funktioniert alles so wie es soll

wenn ich aber bevor ich das A20-Gate aktiviere das Bios Interrupt 13h benutz (im Code mit "Todesint" gekennzeichnet),
um den Kernel zu laden, funktioniert die A20-Gate Aktivierung nicht mehr,
dann landet er während der Aktivierung an der mit "Endlosschleife" makierten Stelle in einer Endlosschleife

ich versteh nicht was es für einen Unterschied macht, dass ich davor den Kernel an 0x1000:0x0000 lade,
das kann doch dem A20-Gate egal sein

vielleicht hat jemand von euch ne Idee,
hier der Code:

http://scalesofjustice.sc.funpic.de/boot.txt

ich assembliers einfach direkt mit nasm zu einem flat binary image,
fülle das bis es so groß wie eine diskette ist mit nullen, und starts


auf Bochs und Qemu läuft das ganze übrigens problemlos,
nur auf VMware und einem echten Pc klappts nicht
(hängt wohl irgendwie damit zusammen, dass bei Bochs und Qemu das A20-Gate von anfang aktiviert ist)
3
Lowlevel-Coding / Nullen an Image Datei anhängen
« am: 14. July 2006, 19:24 »
gibts unter Linux irgendnen Befehl mit dem ich an eine Datei Nullen anhängen kann, bis sie eine bestimmte größe erreicht?
Klar, könnt ich das bei Nasm einfach mit times ans Ende schreiben, aber es ist auch C Code dabei, und der ist bei mir hinter dem Assemblercode

allgemein, gibts eigentlich ne gute Seite auf der alle Standard-Linux Befehle erklärt sind?
dann brauch ich hier nich für jeden Fragen
4
Lowlevel-Coding / Bochs Debugmodus unter Linux
« am: 11. July 2006, 17:11 »
wie startet man denn unter Linux den Debugmodus von Bochs?
muss ich Bochs dafür selbst kompilieren?
(so stehts zumindest in der Anleitung von Bochs)

wenn ja, hat vielleicht jemand ne kompilierte Version die auf SuSE läuft?
(.deb kann man Notfalls auch mit Alien in ein .rpm umwandeln)
5
Lowlevel-Coding / Code zum aktivieren des A20-Gates
« am: 09. July 2006, 18:23 »
Für das aktuelle Problem, siehe unten
6
Lowlevel-Coding / wo ist memcpy?
« am: 08. July 2006, 19:42 »
ich will mit ld nasm code linken, es werden von ld aber nur 2 Ausgabeformate von nasm unterstützt:
win32     Microsoft Win32 (i386) object files
rdf       Relocatable Dynamic Object File Format v2.0


bei beiden bekom ich aber folgende Meldung von ld:
ld: warning: cannot find entry symbol start; defaulting to 0000000000010000

wie leg ich denn mit nasm einen einsprungpunkt fest?
ich hab einfach mal ein label "start" global gemacht, tuts aber nicht

bei windows hab ich immer elf oder obj genommen (weis nicht mehr) da wollte er keinen einsprungpunkt,
aber das format nimmt der linux ld nicht
7
Lowlevel-Coding / linux
« am: 07. July 2006, 13:54 »
ich will jetzt Linux zur Betriebssystemprogrammierung verwenden,
dazu ein paar fragen:

- woher bekom ich ein virtuelles Diskettenlaufwerk?

- gibts sowas wie partcopy für linux?
oder wie soll ich sonst den kernel hinter den bootloader kopieren?

- unter Windows gibts ja batch dateien, gibts was ähnliches unter linux?


ach und noch was, was nicht mit Betriebssystemprogrammierung zu tun hat:

wo ist das Einstellungsmenü von Firefox?
das mit dem man die Startseite, JavaScript, usw. einstellt,
bei Windows gabs das, bei Linux find ichs nirgendwo

EDIT:

kann man bei "Lock Screen" auch irgendwie ne Passwort abfrage reinmachen?
so ist das ja sinnlos
(ich benutz Gnome, weis nich ob das was ändert)
8
Lowlevel-Coding / Pmode VGA?
« am: 01. July 2006, 18:34 »
wollt mal wissen ob man im Protected Mode VGA benutzen kann,
ich dachte immer das geht nicht, abe rin nem anderen forum meinte einer sein OS kann das

und wie geht das dann?
einfach im Real Mode einschalten und dann im Protected Mode normal benutzen?
9
Lowlevel-Coding / Jump in den Pmode funzt nich
« am: 16. June 2006, 15:32 »
Ich hab mit Tee-Jays Tutorial probiert in den Pmode zu springen,
aber irgendwie funzts nich:

www.zeit-fuers-ich.de/pmode.txt


er kommt zwar in den Pmode, aber der Jump

db 0xea
dw pmode
dw 0x0008


springt daneben, deswegen kommt dann lock prefix unallowed
Bochs zeigt allerdings an, ich bin an 0x0008:0x00000067 (das ist die richtige Adresse)

das heißt eigentlich es muss etwas in der GDT falsch eingetragen sein,ich find den Fehler aber nicht
10
Lowlevel-Coding / lgdt Operand
« am: 16. June 2006, 12:34 »
das hier steht in Tee-Jays Tutorial:

gdt:
limit dw 0
base dd 0


dort werden die entsprechenden Werte eingetragen, um sie dann zu laden:

lgdt [gdt]

in meiner Befehlsreferenz steht:

Zitat
Der Operand ist ein Zeiger auf eine Struktur


aber warum dann [gdt], damit würde doch der Wert der an gdt steht geladen,
aber der Befehl will laut der Referenz ja einen Zeiger,
dann müsste man doch

lgdt gdt

schreiben
11
Lowlevel-Coding / MSDOS compatibility FPU Exception
« am: 06. June 2006, 18:57 »
immer wenn ich mein Programm, das die FPU benutzt, mit Bochs starten will,
bekomme ich eine "MSDOS compatibility FPU Exception",
weis jemand was die bedeutet?
ich konnte keine Infos drüber finden
12
Lowlevel-Coding / mit far pointer über Segment Grenzen? (C)
« am: 04. June 2006, 14:26 »
ich hab mit Turbo C ein Programm geschrieben, in dem gibts nen far Pointer:

unsigned char far *test = (unsigned char far *)0x20000000;

also ein far pointer zu 2000:0000,
den benutz ich ganz normal als Array, zB:

test[0] = 255;

soweit funktioniert das auch

aber was wenn ich nun sowas mache:

test[65536] = 255;

da der Spaß bei 0 anfängt, ist 65536 ja genau im nächsten Segment,
bekommt Turbo C das automatisch hin und schreibt das dann einfach ins nächste Segment, oder macht der da dann murks?

mein Programm funktioniert jedenfalls nicht, muss aber nicht daran liegen

eigentlich hätte ich das einfach ausprobieren können

test[65536] = 255;
if(test[65536] == 255)
{
  //irgendwas
}


aber vielleicht gibts auch einfach nen Überlauf oder so
und das Zeug ist dann einfach an 2000:0000, statt 3000:0000
13
Offtopic / IBM Universall Adapter
« am: 30. May 2006, 19:52 »
das Video müsst ihr euch mal anschauen:
http://www.youtube.com/watch?v=AIOqOxI0K_I&search=ibm%20adapter

das ist so lustig, ich muss mir das immer wieder anschauen

überhaupt macht IBM immer so witzige Werbung
14
Lowlevel-Coding / Turbo C Trigonometrie
« am: 30. May 2006, 19:48 »
ich weis ich hab das vor einiger Zeit schonmal geragt, aber ich probiers jetzt in der Honung, dass es nun jemand weis nochmal:

mein OS ist aus Assembler und C, ür C benutz ich Turbo C,
bis jetzt geht es in meinem OS hauptsächlich darum zu rechnen,
ich hatte immer wieder Probleme mit dem Koprozessor, aber irgendwann hats dann geklappt

eigentlich unktioniert alles ganz gut, nur Sinus und Cosinus wollen einach nicht
ich benutz daür einach die Standardlibs von Turbo C (hab aber auch schon die von Watcom ausprobiert)
dummerweise kommt immer ein alsches Ergebnis raus und ich verstehe einach nicht warum

wenn ich eine ganz normale DOS Anwengung mit Turbo C mache, klappt es, deswegen denke ich, ich initialsiere den Koprozessor nicht richtig

ich initialisiere den einach einmal am anang mit init
muss man das vielleicht öter machen? oder anders?


die Taste zwischen D und G ist aus meiner Tastatur kaputt
deswegen hab ich so ne schöne Rechtschreibung ;-)
(die o.g. Anweisung zum initialisieren hat den Buchstaben übrigens am Anang, also init mit dem Buchstaben davor
15
Lowlevel-Coding / Turbo C Fliesskomma Variablen
« am: 19. April 2006, 21:41 »
Ich probier jetzt seit Anfang der Woche Turbo C dazu zu bringen mit Fliesskomma Variablen zu rechnen,
aber das ding will einfach nicht

wenn ich eine ganz normale Dos exe mit Turbo C und dem dazugehörigen Linker mache, ist das kein Problem,
aber wenn ich das in mein OS einbauen will, also mit Turbo C und JLoc als Linker, will er partout nicht mit Fliesskommazahlen rechnen,
sobald ich das mache, hängt sich der Rechner einfach auf,

alles andere, also mit Integern rechenen, funktionen aufrufen, usw. funktioniert ohne Probleme

erst dacht ich die FPU funktioniert allgemein nicht,
aber mit Assembler hab ichs jetzt hinbekommen mit Fliesskomma Variablen zu rechnen
wenn alle Stricke reissen mach ich halt Assemblerfunktionen, die das Fliesskommazahl rechnen übernehmen, aber das will ich eigentlich nicht

EDIT:

jetzt hab ichs mal mit der Watcom Library ausprobiert,
wenn ich die benutze stürzt das Ganze zwar nicht ab
aber die Rechnung gibt immer nur 0 zurück
und Bochs sagt: "math_abort: MSDOS compatibility FPU exception"

EDIT2:

hab in nem Thread was gefunden:
da hatte einer die gleiche Exception, bei im lag es an IRQ 13
ich versteh aber nicht wirklich was das nun heist
hier der Anfang:

http://www.ussg.iu.edu/hypermail/linux/kernel/0011.2/0426.html

und hier die Antwort:

http://www.ussg.iu.edu/hypermail/linux/kernel/0011.2/0529.html

vielleicht versteht einer von euch was das Problem war
16
Lowlevel-Coding / Memory Models einhalten
« am: 17. April 2006, 13:33 »
jetzt hab ich verstanden was Turbo C für ein Problem hat:
ich halt mich nicht an die Memory Models

aber ich weis auch nicht wirklich wie, ich benutz grade Small:
64KB Code
64KB Daten + Stack + Heap
restlicher Speicher Far Heap

aber wie genau mach ich das jetzt mit nasm?

sobald ich das Programm in den Speicher ladt,
ist doch Code und Daten im gleichen Segment,
aber das Daten Segment muss ja 64KB (0x1000 Segmente) hinter dem Cide Segment anfangen

ich probier mal Modell Tiny, da soll ja eh alles auf einem Haufen sein
17
Lowlevel-Coding / fliesskommazahlen funktionieren nicht
« am: 16. April 2006, 20:35 »
ich hab mein Betriebssystem nun endlich soweit das man C gut benutzen kann
es funktioniert auch alles soweit

nur die fliesskommazahlen lassen noch zu wünschen übrig:

rechnen mit fliesskommazahlen geht ohne Probleme, aber es klappt einfach nicht eine fliesskommazahl, also float oder double in short, oder long um zu wandeln
sobald ich das mache, hängt sich der Computer auf, sogar Bochs gibt nur noch sinnlose Fehlermeldungen aus (Festplatten schreibe fehler, oder Bochs selber stürzt einfach ab)

so sieht mein C-Code aus:
long l = 0;
float f = 0;

long = (long)f;


ich benutz Turbo C (also 16-Bit) und linke dessen Fliesskomma Emulation ein (ich habs auch schon mit der FPU-Unterstützung versucht, gleiches Ergebnis)

weis vielleicht jemand woran das liegen kann,
oder kennt ein Hintertürchen, mit dem ich irgendwie floats, oder doubles in shorts, oder longs umwandeln kann?
18
Lowlevel-Coding / falsche Parameter
« am: 15. April 2006, 15:27 »
Klasse, nun hab ich nach 2 Tagen endlich rausgefunden, dass der Error Code nicht 0x10, sondern 0x01 ist, meine Error-Code Auslese Routine war falsch -.-

0x01 bedeutet falscher Funktionscode, oder falsche Parameter

aber jetzt kommts:

wenn ich 10 Byte, oder weniger auf dem Stack habe funktioniert alles, d.h. ich bekomme auch keinen Fehlercode zurück

wenn ich mehr als 10 Byte auf dem Stack habe kommt Fehlercode 0x01 zurück

und wenn ich 14, oder mehr Bytes auf dem Stack habe, kehrt die int 0x13 gar nicht zurück

ich dachte das kann gar nicht sein, aber ich habs jetzt bestimmt 20x ausprobiert
kann mir das mal einer erklären? o.O


EDIT:
keine Ahnung was das Problem war, aber ich hab jetzt den Stack einfach mal wo anders hingetan und jetzt geht alles ohne Probleme
19
Lowlevel-Coding / Textausgabe
« am: 15. April 2006, 14:10 »
endlich hab ich die Ursache für den Diskettenlesefehler gefunden:
meine Textausgabe Funktion

ich versteh allerdings nicht im geringsten was an der falsch ist:

text:
push ax
push bx
push si
mov si, string
text_goon:
lodsb
cmp al, 0x00
je text_e
mov ah, 0x0e
mov bx, 0x0007
int 10h
jmp text_goon
text_e:
pop si
pop bx
pop ax
ret
string db "string", 0


wenn ich direkt vor der Text Funktion meine Diskettenlesefunktion aufrufe,
funktioniert Alles problemlos
ruf ich erst die Textfunktion und dann die Diskettenlesefunktion auf, hängt er sich auf so bald ich in der Diskettenlesefunktion int 0x13 aufrufe

aber für mich ergibt das absolut keinen Sinn, ich pushe doch schön alle Register die ich benutze,
also wo ist das Problem?

EDIT:
in Bochs funktionieren übrigens beide Möglichkeiten ohne Probleme
20
Lowlevel-Coding / wofür ist ES?
« am: 15. April 2006, 01:16 »
Also CS, zeigt auf das Segment, in welchem grade Code ausgeführt wird,
wird also für Sprünge und eigentlich jeden Befehl gebraucht

DS ist das Gleiche für Daten, also das wird z.B. bei sowas gebraucht:
mov [0x0000], ax
ist dann eigentlich
mov [ds:0x0000], ax

aber wofür ist dann ES?
ES muss man ja auch am Anfang des Bootloaders auf das Code Segment setzen damit alles funktioniert
Ich dachte immer ES wäre nur für Schiebeoperationen
Seiten: [1] 2

Einloggen