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

Seiten: [1]
1
Offtopic / Re: Download bricht kurz vor Schluss ab
« am: 19. May 2008, 10:05 »
Ich habs mal komplett runtergeladen, das ZIP-Archiv war aber fehlerhaft. Vielleicht liegt das am Dateinamen mit dem 'é' ...
2
Offtopic / Re:
« am: 21. August 2007, 16:19 »
Aja, dann werd ich mal schaun dass ich den Rest auch verstehe :wink:

Danke für die schnelle Antwort
3
Offtopic / Hexadezimalzahlenschreibweise (2xAh 2xCh) ???
« am: 21. August 2007, 16:00 »
Hab bei der Suche nach Soundblaster16-Programmierung dieses Dokument gefunden:

http://homepages.cae.wisc.edu/~brodskye/sb16doc/sb16doc.html

Da stehn dann so lustige Zahlen wie:

Zitat
2x6h - DSP Reset
2xAh - DSP Read
2xCh - DSP Write (Command/Data), DSP write-buffer status (Bit 7)
2xEh - DSP Read-buffer status (Bit 7), DSP interrupt acknowledge
2xFh - DSP 16-bit interrupt acknowledge

Hexadezimalzahlen schreibt man ja mit 0x - z.B. 0xFF gleich 255 oder FFh gleich 255. Aber was zum :evil: sollen 2xAh usw. bitte bedeuten? Steh echt auf der Leitung...
4
Lowlevel-Coding / Re: 2 tutorialtests bitte
« am: 20. October 2006, 21:09 »
Wenn ich das richtig sehe gibt's das erste Buch kostenlos im Internet:

Google Ergebnisseite (PDF)
5
Lowlevel-Coding / Re: Warum wird IRQ14 nur einmal aufgerufen?
« am: 15. October 2006, 17:02 »
Ich schätz mal, wenn ein Sektor (mechanisch) beschädigt ist oder sonstwie nicht gelesen werden kann, probiert die Festplatte noch einmal, ihn zu lesen (Retry-Modus 30h).

Ach ja: Auf manchen Seiten steht, dass immer nur ein Sektor gelesen wird (d.h. ich weiß gar nicht ob 4 Sektoren zu lesen auf deine Art funktioniert).

http://www.ulinktech.com/downloads/ATA_Command_Table.doc
http://hem.passagen.se/communication/ide.html
6
Lowlevel-Coding / Re: Warum wird IRQ14 nur einmal aufgerufen?
« am: 15. October 2006, 15:33 »
Also ich hab deinen Code mal assembliert und in Bochs gebootet.

Mir ist aufgefallen, dass der Interrupt überhaupt nicht aufgerufen wird.
Probier's doch selbst mal aus: Ich habe als Schreibquelle nicht "WBuffer" benutzt, sondern das Label "start" das ich an den Codeanfang gesetzt hab (damit hat man auf jeden Fall 512 byte zusammen und kann im Festplattenimage erkennen, was geschrieben wurde). Außerdem habe ich nach "mov si, start" jeweils noch eine Zeile "mov word [si], 0x****" gesetzt (setze für die **** vor und innerhalb des Interrupts was unterschiedliches ein um unterscheiden zu können wer auf die Festplatte schreibt). Dann habe ich das Ganze als Floppy gebootet und heraus kam, dass der Interrupt nicht aufgerufen wurde (d.h. er schreibt nix). Der erste Sektor allerdings wird korrekt geschrieben.

Ich wusste gar nicht (bin noch en Noob sorry) dass bei solchen Fällen ein Interrupt aufgerufen wird, weil ich IDE-Lesen/Schreiben bisher nur im Protected Mode mache.

Noch en paar Sachen, die vielleicht falsch sind:

- "mov al, 10100000b" - die gesetzten Bits sind obsolete (ich weiß dass es in Bochs funktioniert, wenn sie null sind)
- "mov al, 00110011b;command for write sectors" - die Zahl entspricht 0x33 was allerdings "Write long without retry" wäre (bei Festplatten vielleicht doch lieber 0x30 = write sectors with retry oder 0x31 without retry)

Und den folgenden Abschnitt kapier ich gar net, wozu is der da:
Zitat
mov cx,4
mov si,BPuffer
;mov dx,1F0h
rep outsb
7
Lowlevel-Coding / Re: Warum wird IRQ14 nur einmal aufgerufen?
« am: 14. October 2006, 18:48 »
Schau mal hier, vielleicht hilft dir das weiter:

http://osdever.net/bkerndev/Docs/irqs.htm (Bran's Kernel Development Tutorial, sehr zu empfehlen)

Ist halt zum Schreiben von Interrupthandlern gedacht, aber egal...
8
Lowlevel-Coding / Re: Warum wird IRQ14 nur einmal aufgerufen?
« am: 14. October 2006, 13:50 »
Zitat
.1:

mov al,20h  <- extra am EOI gedacht
out 20h,al
out 0A0h,al
iret

Also da glaube ich liegt dein Fehler. Du hast zwar richtig gedacht, weil man für IRQ 8 bis 15 auch an den zweiten Interruptcontroller einen EOI senden muss - meiner Meinung nach musst aber den EOI zuerst an den Slave, und dann erst an den Master schicken (der Port 0xA0 steht für den Slave). Es sollte also heißen:

.1:

mov al,20h
out 0A0h,al    ; Slave EOI
out 20h,al      ; Master EOI
iret
9
Lowlevel-Coding / Re: CPU-Type Codeabschnitt
« am: 10. October 2006, 19:35 »
Ich hab das Tutorial nicht gelesen, aber dem Code nach wird überprüft ob die Bits 24-31 gesetzt sind (was auch immer das sein mag).
Wenn alle gesetzt sind, ist es kein 386er (also jmp not_386), falls eines davon nicht gesetzt ist, handelt es sich um einen 386er.

Die 0xF000-Mask wird benutzt, weil die anderen Bits wohl nicht für die Prozessorbestimmung von Bedeutung sind.
10
Qemu hab ich noch net benutzt, aber wenn du dir von irgendeinem Hobby-Betriebssystem ein CD-Image für Qemu runterlädst, findest du vermutlich raus wie's geht.

Für Bochs musst du ein Script erstellen, bestenfalls mit dem Namen boot.bxrc, damit du es mit einem Doppelklick starten kannst.

megs: 16 # Speicher in MB
boot: cdrom # Von Floppy wäre "a", von der ersten Festplatte wäre "disk"

# Falls du ein Diskettenimage einlegen willst
#floppya: 1_44="floppy.img", status=inserted

ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
# Wenn du ein Festplattenimage hinzufügen willst, sollte es am Primary Master hängen wie in nem PC üblich:
#ata0-master: type=disk, path="img_hd0.img", mode=flat, cylinders=20, heads=16, spt=63 # die CHS Angaben müssen stimmen

ata0-master: type=cdrom, path="cd.img", status=inserted, biosdetect=auto, model="Generic 1234"

# Falls du die anderen (E)IDE Kanäle noch benutzen willst (mehr Laufwerke  :-D )
#ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
#ata2: enabled=1, ioaddr1=0x1e8, ioaddr2=0x3e0, irq=11
#ata3: enabled=1, ioaddr1=0x168, ioaddr2=0x360, irq=9

romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000
# Bochs hat zwei VGA-BIOS's zur Auswahl: Elpin unterstützt aber keinen VESA Modus, also nimm gleich das andere
#vgaromimage: file=$BXSHARE/VGABIOS-elpin-2.40
vgaromimage: file=$BXSHARE/VGABIOS-lgpl-latest
log: ./bochsout.txt
debugger_log: ./bochsdebug.txt

# Folgende Variablen waren bei mir bislang nicht notwendig (es gibt noch viel mehr Einstellungen aber ist ja unwichtig...)
#vga_update_interval: 100000  #microseconds
#keyboard_serial_delay: 200  #microseconds
#floppy_command_delay: 500   #microseconds
#ips: 40000000

#mouse: enabled=1
#private_colormap: enabled=0
#i440fxsupport: enabled=0
#newharddrivesupport: enabled=1

P.S.: Falls du's noch nicht weißt, bei Bochs ist auch ein Tool namens bximage dabei mit dem du Images erstellen kannst (liefert dir auch die passenden CHS Angaben).
11
Zitat
Man verwendet das Packet Interface um removeable media devices (CD, DVD Laufwerke) besser ansprechen zu können.
Theoretisch ist es nämlich möglich den normalen Read Sector Befehl zu verwenden, allerdings gibt es da eine Menge zu beachten, und es wäre nicht die korrekte Methode.

Also mit PI-Befehlen (Packet Interface)... wie lautet dann der "Packet Command"-befehl den man senden muss?
12
Wo wir hier schonmal über Toaster's Tutorial diskutieren... ich hab entsprechend eine Funktion geschrieben, um den ersten Sektor eines IDE-Laufwerkes zu lesen.

Sie funktioniert auch perfekt. Wenn ich aber z.B. von Secondary Master lesen will, geht das (in Bochs!) nur von einer Festplatte (Imagedatei), nicht aber von einem CD-Laufwerk (ISO-Image).

Ich überprüfe dabei bei einem Fehler das Error-Register und es ist null !?


Ausschnitt Bochsscript:

ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15
ata1-master: type=cdrom, path="img_cd0.iso", status=inserted, biosdetect=auto, model="Generic 1234"
13
Danke für das Tutorial, werd es aber erst später ausprobieren können weil mein OS doch nicht so weit ist, wie ich dachte  :-D .
14
Hatte das "kann nicht ausgeführt werden" Problem auch vor kurzem.

Es tritt nur bei DJGPP auf, nicht bei GCC für Windows (MinGW). Allerdings funktionieren manche Betriebssystem-Tutorials nur mit dem DJGPP-Compiler.

Bei mir war es nicht nur die Anzahl der Argumente, sondern auch die Länge (oder vielleicht die Gesamtlänge) und auch der Dateiname (darf vermutlich nur 8.3 lang sein).

Zum Beispiel hat folgendes nicht funktioniert:
   gcc <irgendwelcheparameter> -o objects/cpp/cppsupp.obj -c src/cpp/cppsupp.c

Aber das hier:
   gcc <irgendwelcheparameter> -o objects/cppsupp.obj -c src/cpp/cppsupp.c


Hoffe es hilft dir und anderen weiter...
15
Ok danke. Über die CMOS-Register geht's eigentlich ganz einfach (wenn's jemanden interessiert: http://www.codepedia.com/1/CMOS_C).

Und wegen ATA: Ich hasse Seiten mit Tausenden von Whitepapers - wie soll ich denn da was finden?

Gibt's keine besseren Seiten dazu? Und welche Methode ist gut bei sehr großen Festplatten ?
16
Im Protected Modus kann ich ja int13/al=8 nicht verwenden.

Für Lesen und Schreiben von Sektoren habe ich schon ein Tutorial gefunden, aber wie kann ich die Festplattengeometrie (Größe, Sektoren pro Track....) rausfinden, indem ich Ports benutze?
Seiten: [1]

Einloggen