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

Seiten: 1 [2]
21
Offtopic / Ein wenig Win Source beim VS .Net
« am: 27. May 2005, 19:16 »
Wenn ich beim Microsoft Visual Studio .Net z.B. folgendes Programm debugge (per F11 also Einzelschritt und NICHT Prozedurschritt), wird bei dem new-operator eine neue Datei geöffnet und dort weitergemacht:

void main()
{
    char *ch;
    ch = new char;
    delete char;
}

Das ist auch bei vielen anderen Sachen so. Ich weiß jetzt, dass diese Dateien im Ordner "Microsoft Visual Studio .Net 2003\Vc7\crt\src" gespeichert werden. Und ich frage mich langsam ob das Windows Source Code ist. Man könnte zwar nichts mit anfangen, aber es würde ich trotzdem interessieren ob jemand weiß woher dieser Code kommt.
22
Offtopic / Video von allem auf dem Bildschirm erstellen
« am: 24. May 2005, 18:23 »
Gibt es ein Tool mit dem man ein Video von dem machen kann was auf dem Bildschirm zu sehen ist? Also das man z.B. sieht, wie der Mauszeiger bewegt wird usw., das sollte am besten auch bei Spielen funktionieren.
23
Lowlevel-Coding / C++ ifstream <- ofstream
« am: 19. May 2005, 13:30 »
Ich habe einen ifstream für einen Inputfile und einen ofstream für den Outputfile. Nach einer Funktion möchte ich dass der erstellte Outputfile zum neuen Inputfile wird. Der Outputfile wird tempx genannt. x steht dabei für eine Zahl die immer weiter erhöht wird. Also etwas so:

Out:        In:
temp0     File.txt
temp1     temp0
temp2     temp1
...


Dafür verwende ich diesen Code:

// Alten Input-File schließen
FileIn->close();

// Alten Outputfile schließen
FileOut->close();

// Erstellten Temp-File zum Inputfile machen
char buffer[200];
int j = sprintf(buffer, "temp%d", iTempFileNum);
buffer[j] = '\0';
FileIn->open(buffer);

// Temp-File Anzahl erhöhen
iTempFileNum++;

// Neuer Temp-File ist jetzt der Outputfile
char buffer2[200];
int k = sprintf(buffer2, "temp%d", iTempFileNum);
buffer2[k] = '\0';
FileOut->open(buffer2);

Das scheint auch problemlos zu funktionieren, aber das Lesen beginnt danach am Dateiende. Das heißt man bekommt sofort ein eof.
Also die Frage: Wie kann ich den "Cursor" an den Dateianfang setzen.
24
Offtopic / Webspace
« am: 19. May 2005, 13:15 »
Wo kriegt man kostenlosen Webspace her? Es gibt ja z.B. 8ung, aber gibt es bessere Alternativen. Am besten natürlich ohne Werbung. Ich will keine Homepage oder sowas erstellen sonder einfach die Möglichkeit haben, z.B. Bilder zu veröffentlichen.
25
Offtopic / Dateityp "Ordner" unter Win verändern
« am: 15. May 2005, 14:04 »
Nach Ändern des Icons für einen Ordner m.H. von Ordneroptionen hab ich dieses Problem bekommen: Immer wenn ich einen Ordner öffne, wird der in einem neuen Fenster geöffnet. Die Option "Jeden Ordner in einem anderen Fenster öffnen" hab ich natürlich nicht aktiviert.
Hat jemand ne Idee wie man das wieder hinbiegt? Von mir aus auch nur im Ansatz, wo z.B. die Einstellungen für den Dateityp Ordner gespeichert werden.
Aja: Systemwiederherstellung hab ich deaktiviert  :roll:
26
Lowlevel-Coding / C++: Bestimmten String aus Datei lesen
« am: 04. May 2005, 17:43 »
Ka ob das hier reingehört weil es nichts mit OS Dev zu tun hat sondern eher mit C++ & fstream. Aber man kanns ja mal versuchen.
Also, ich habe eine Datei in der zum Beispiel folgendes steht (nur ein Beispiel):

Testtext
#abc Test.
Hallo

Jetzt möchte ich die Datei Byte für Byte lesen und in einen Outputfile schreiben. Wenn das aktuelle Zeichen aber ein # ist möchte ich die nächsten 4 Bytes auch lesen und checken ob da "abc " steht. Wenn nicht soll das #-Zeichen und die gelesenen 4 Bytes unverändert in die Output Datei geschrieben werden und normal weitergemacht werden. Wenn aber in der Datei "#abc " steht und das erkannt wurde möchte ich alle Zeichen bis zum Punkt in einen neuen String schreiben und den ganzen Teil nicht in die Outputdatei schreiben. Ich hab einen Pointer auf die Inputdatei und einen Pointer auf den Outputfile.

Ich weiß die Erklärung ist nicht gerade top, also wenn jemand Fragen dazu hat werd ich die beantworten (eigentlich logisch ^^).

Der Code bisher:

char ch;
char tmp[4];
char *str;
while(!FileIn->eof())
{
// Zeichen lesen
ch = FileIn->get();

// Wenn Zeichen kein # ist, einfach speichern
if(ch != '#')
{
FileOut->put(ch);
} else {
// Zeichen ist ein #

// Nächsten 4 Zeichen lesen
FileIn->read(&tmp[0], 4);
tmp[4] = '\0';

// Wurde abc erkannt
if(strcmp(tmp, "abc ") == 0)
{
// String dahinter ermitteln
while(ch != '.')
{
ch = FileIn->get();
*str++ = ch;
}
*str= '\0';
// Zum Debuggen String anzeigen
cout << file << endl;
} else {
// Nein, also alles bisher gelesene speichern...
FileOut->put('#');
FileOut->write(tmp, 4);
// ...und weitermachen
continue;
}
}
}
27
Offtopic / XP SP2 Uninstall ohne XP
« am: 28. April 2005, 14:51 »
Hi!
Ich hab gestern das SP2 für XP "installiert". Nach einigem hin und her bekam ich das Ergebnis meiner Arbeit: Nichts geht mehr! Ich kann den PC nur noch im Abgesicherten Modus gerade so hochfahren. Jetzt würde ich gerne das SP2 wieder deinstallieren. Der normale Uninstaller geht nicht (ka warum). Ich hab bisher folgende Möglichkeiten entdeckt es trotzdem zu schaffen, wenn irgendwer ne Lösung für eine hat bitte sagen:
o Uninstaller doch ans Laufen kriegen
o Über meine Linux Installation (hab schon nen Backup der geänderten Daten gefunden und ein Batch-File der alles wieder an den richtigen Ort kopiert). Problem: Im Batchfile sind alle Verzeichniss- & Dateinamen klein geschrieben, Linux unterscheidet aber zwischen Groß&Kleinschreibung.
o Über Windows den Batchfile starten. Problem: Systemdateien können nicht geändert werden
o Über eine Bootdiskette. Problem: Ein Tool ist nötig das auf NTFS Festplatten schreiben kann.

Thx!

DarkThing
28
Lowlevel-Coding / Bootloader Problem
« am: 18. April 2005, 15:59 »
Ich hab mich jetzt entschlossen große Teile bei meinem OS neu zu coden. Also hab ich mit dem Bootsector angefangen und den alten umgebaut, erweitert und besser strukturiert. Das Problem an der Sache ist das er jetzt nicht mehr die Datei findet die er laden soll. Ist eigentlich alles relativ simpel gehalten da die Hauptarbeit in stage2.sys abläuft, sollte also verständlich sein.

Wenn man ihn startet (auf normalen PC, bei Bochs ka), kommen alle Messages und er malt 14 Punkte (für jeden Sektor von Rootdir einen). Dann kommt ein File Error.

[BITS 16]
[ORG 0x7C00]

;------- BIOS Parameter Block und BS FAT12 --------
jmp short start
nop
%include "G:\_UnrealOS\source\boot\FAT.inc"

;---------------------MAIN CODE--------------------
start:

; BOOTLAUFWERK SPEICHERN---------------------------
mov [DriveNumber], dl ; Von DL in Var kopieren

; SEGMENTE UPDATEN---------------------------------
mov ax, cs ; Codesegment ermitteln
mov ds, ax ; und in alle anderen Segmente schreiben
mov es, ax
mov gs, ax
mov fs, ax

; VORRÜBERGEHENDEN STACK BAUEN---------------------
mov ax, 0x7B0 ; Stack Adresse ist 0x7BFF
mov ss, ax
mov sp, 0xF0

; BOOTMESSAGES ANZEIGEN----------------------------
mov si, MsgBoot ; BootMsg laden
call putstr ; und anzeigen
mov si, MsgLoading ; Loading Stage2 Message laden
call putstr ; und anzeigen

; ROOTDIR NACH 0x7E00 LADEN------------------------
; Die Zieladresse steht per Default schon richtig
; Startsektor steht auch schon richtig
mov cx, [RootSize] ; Anzahl der Sektoren laden
call ReadSectors ; Laden!

; ES UPDATEN---------------------------------------
mov bx, 0x7C00
mov es, bx

; STAGE2.SYS LADEN---------------------------------
Search:
mov cx, word [MaxRootEntries] ; Maximale Anzahl der Einträge
mov di, 0x200 ; Bei Sektor 2 starten
.1:
push cx ; CX sichern
mov cx, 11 ; CX <- 11 (Länge eines Dateinamens)
mov si, FileName ; Dateiname laden
push di ; DI sichern
rep cmpsb ; Zeichen für Zeichen verlgeichen (Zu suchender Dateiname & aktueller)
pop di ; DI wiederherstellen
je Found ; Gefunden? -> Dann springen!
pop cx ; Nein? -> CX wiederherstellen
add di, 32 ; Nächster Eintrag
loop .1 ; Weitermachen
jmp err ; Alle Einträge durchsucht und trotzdem kein Erfolg? -> Fehler!

Found:
mov ax, [di+26] ; Startsektor der Datei ermitteln und in AX schreiben
call fat2lsn ; FAT-Startsektor in echten LSN Sektor umrechnen
mov [FileStart], ax ; Startadresse fertig berechnet, deshalb speichern
mov ax, [di+28] ; Dateigröße in AX speichern
call bytes2sectors ; Dateigröße von Bytes in die Anzahl der Sektoren umrechnen
mov cx, ax ; und in CX speichern
mov ax, [FileStart] ; Startsektor der Datei in AX speichern
mov [LBA], ax ; Startsektor für ReadSectors festlegen
mov [LoaderSegment], word 0x840 ; Zielsegment
call ReadSectors ; Datei laden!
 
; ZU STAGE2.SYS SPRINGEN---------------------------
push word [DriveNumber] ; Bootlaufwerk pushen (wird von stage2.sys benötigt)
jmp 0x840:0x0 ; Zu stage2 springen

; SYSTEM ANHALTEN----------------------------------
jmp hang

;---------------------FUNCTIONS--------------------

; putstr
; Stringausgabe
; String steht in SI
putstr:
;pusha ; Alle Register sichern

.1
lodsb ; Byte laden
or al,al ; Kommt immer der alte Wert raus, nötig für jz
jz short .2 ; Byte ist '\0'? -> Dann Ende
mov ah,0x0E ; Funktionsnummer
mov bx,0x0007 ; Farbe
int 0x10 ; Bildschirmausgabe + Cursorbewegung
jmp .1 ; Nächstes Byte
.2:

;popa ; Alle Register wiederherstellen
ret

; hang
; System aufhängen
hang:
cli ; Keine Interrupts
jmp $ ; Aufhängen per Endlosschleife

; lsn2chs
; Rechnet die Adresse vom LSN ins CHS Format um
; Parameter:
; o AX = LSN
; Rückgabe:
; o CL = Sector
; o DH = Head
; o CH = Cylinder
lsn2chs:
xor dx, dx ; DX <- 0
mov bx, [SectorsPerTrack] ; BX <- Sektoren pro Track
div bx ; dx=(ax mod bx)+1
inc dx ; DX um eins erhöhen
push dx ; Wird der absolute Sektor sein
xor dx, dx ; DX <- 0
mov bx, [NumHeads] ; BX <- Anzahl Heads
div bx
mov ch, al ; Track
mov dh, dl ; Head
pop ax ; Sektor von Stack nach AX
mov cl, al ; Sektor in CL
ret

; ReadSectors
; Sektoren laden
; Parameter:
; o CX = # Sektoren
; o LBA = Ab welchem Sektor
ReadSectors:
mov ax, [LBA]

.1:
push cx ; CX sichern
call lsn2chs ; LSN in CHS umrechnen
.2
mov es, [LoaderSegment] ; Ziel-Segment aus Var holen
mov bx, [LoaderOffset] ; Ziel-Offset aus Variable kopieren
mov ax, 0x0201 ; Sektor Lesen-Befehl und 1 Sektor lesen
mov dl, [DriveNumber] ; Drive Number kopieren
int 0x13 ; BIOS-Befehl: Lesen
jc .2 ; Fehler? -> Nochmal!

add bx, [BytesPerSector] ; BX um Anzahl der Bytes pro Sektor erhöhen
mov [LoaderOffset], bx ; BX beeinhaltet jetzt das neue Offset

mov si, MsgDot ; Punkt malen
call putstr

mov ax, [LBA] ; Sektornummer laden, ...
inc ax ; erhöhen und ...
mov [LBA], ax ; wieder speichern

pop cx ; CX wieder vom Stack holen
loop .1 ; Nächster Sektor

mov [LoaderOffset], word 0 ; Ziel-Offset auf 0 setzen

mov dx, 0x3F2 ; Motor anhalten
mov al, 0x0C
out dx, al
ret

; bytes2sectors
; Rechnet die Bytes in die entsprechende Sektorzahl um
; Parameter:
; o AX = Bytes
; Rückgabe:
; o AX = Anzahl der Sektoren
bytes2sectors:
xor dx, dx ; DX <- 0
div word [BytesPerSector] ; Teilen durch Bytes pro Sektor
cmp dx, 0 ; Glatt aufgegangen?
je .1 ; Ja? -> Dann Ende!
inc ax ; Nein? -> Dann noch einen Sektor meht
.1
ret

; fat2lsn
; FAT-Start-Sektor einer Datei in echte LSN umrechnen
; Parameter:
; o AX = FAT-Sektor
; Rückgabe:
; o AX = LSN-Sektor
fat2lsn:
sub ax, 0x2 ; Fat-Sektor minus 2 rechnen
add ax, [DataStart] ; und plus dem Startsektor der Daten
ret

; err
; Fehlermeldung anzeigen und Sysem anhalten
err:
mov si, MsgError ; Fehlermeldung laden
call putstr ; Und anzeigen
jmp hang ; System anhalten

;-----------------VARS----------------------------
RootSize dw 14 ; Größe des RootDirs in Sektoren
DataStart dw 33 ; Startsektor der eigentlichen FAT Daten

LBA dw 19

LoaderSegment dw 0x7E0 ; Ziel-Segment für ReadSectors
LoaderOffset dw 0x0 ; Ziel-Offset für ReadSectors

FileStart dw 0
FileName db "STAGE2  SYS" ; Dateiname des 2nd Stage Loaders

MsgBoot db "UnrealOS Loader stage1",13,10,13,10,0
MsgLoading db "Loading stage2",0
MsgError db 13,10,"FILE ERROR!",13,10,0
MsgDot db '.',0

;-----------------BOOT----------------------------
times 510-($-$$) db 0
signature dw 0xAA55

Wenn jemand sonst noch Bugs findet kann er das natürlich auch sagen  :)

Thx DarkThing
29
Lowlevel-Coding / 64bit Kernel
« am: 17. April 2005, 19:06 »
Wie kann ich eigentlich einen 64bit Kernel erstellen. Braucht man einen anderen Compiler oder kann man dem das einfach mitteilen (ich verwende DJGPP & NASM)? Und wie kann ich erkennen ob der PC eine 32bit oder eine 64bit CPU hat?
30
Offtopic / OS für Handys
« am: 03. April 2005, 14:10 »
Kann man eigentlich das OS von nem Handy umschreiben oder komplett neuschreiben? Wenn ja: Wer hat sich schonmal damit beschäftigt und wie funktioniert das? Gibt es bestimmte Handys (oder Hersteller) mit denen das vergleichsweise einfach geht?

Thx für alle Antworten.
31
Lowlevel-Coding / Keyboard: IRQ vs. Nicht IRQ
« am: 21. March 2005, 16:49 »
Mein bisheriger Keyboard-Treiber funktioniert so:
Wenn die getch()-funktion aufgerufen wird, warte ich mit einer while schleife so lange bis ne taste gedrückt wurde, also inport(0x60) != 0x0 ist. Danach mach ich aus dem Keycode wie gewohnt ein Zeichen.
Macht es Sinn das System so zu ändern dass es über den IRQ 1 läuft und nen Buffer verwendet?
Seiten: 1 [2]

Einloggen