1
Offtopic / Dümmste Forumdiskussionen
« am: 07. January 2006, 13:37 »
Obwohl man dieses Problem nicht mit TCPA-Chips lösen sollte!
23. November 2024, 11:13
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.
NOTE: Windows XP and Linux can coexist on the same computer. For additional information, refer to your Linux documentation.
volatile BYTE operationDone = 0;
BYTE ReadSectors(WORD startSector, WORD count, void* target)
{
BYTE cylinder, head, sector;
WORD i;
for(i = 0; i < count; i++, target += 512)
{
OutByte(0x1C, 0x03F2); /* Motor starten */
LBAToCHS(startSector + i, &cylinder, &head, §or);
PrepareDMAWrite(2, target, 512);
FloppyOutByte(0x0F);
FloppyOutByte(head);
FloppyOutByte(cylinder);
WaitForFloppy();
FloppyOutByte(0x46); /* Sektor lesen */
FloppyOutByte(head << 2); /* Head */
FloppyOutByte(cylinder); /* Cylinder */
FloppyOutByte(head); /* Head */
FloppyOutByte(sector); /* Sector */
FloppyOutByte(2); /* Sektorengrösse */
FloppyOutByte(18); /* Sektoren pro Spur */
FloppyOutByte(0x1B);
FloppyOutByte(0xFF);
WaitForFloppy();
OutByte(0x04, 0x03F2);
PrintChar('!');
}
return ERROR_NO;
}
void FloppyOutByte(BYTE value)
{
while(1)
{
if(InByte(0x3F4) & 0x80 == 0)
InByte(0x80);
else
{
OutByte(value, 0x03F5);
return;
}
}
}
void WaitForFloppy()
{
while(operationDone == 0);
operationDone = 0;
}
void main()
{
char Text[] = "Welcome to Protected Mode";
char *VideoMem = (char*)0xB8000;
for(i = 0; Text[i] != 0; i++)
{
VideoMem[i] = Text[i];
VideoMem[++i] = 7;
}
}
volatile BYTE operationDone = 0;
BYTE ReadSectors(WORD startSector, WORD count, void* target)
{
BYTE cylinder, head, sector;
WORD i;
for(i = 0; i < count; i++, target += 512)
{
while(InByte(0x03F4) & 0x80 == 0);
OutByte(0x1C, 0x03F2); /* Motor starten */
LBAToCHS(startSector + i, &cylinder, &head, §or);
PrepareDMAWrite(2, target, 512);
/*
while(InByte(0x03F4) & 0x80 == 0);
OutByte(0x0F, 0x03F5);
while(InByte(0x03F4) & 0x80 == 0);
OutByte(head, 0x03F5);
while(InByte(0x03F4) & 0x80 == 0);
OutByte(cylinder, 0x03F5);
*/
while(InByte(0x03F4) & 0x80 == 0);
OutByte(0x46, 0x03F5); /* Sektor lesen */
while(InByte(0x03F4) & 0x80 == 0);
OutByte(head << 2, 0x03F5); /* Head */
while(InByte(0x03F4) & 0x80 == 0);
OutByte(cylinder, 0x03F5); /* Cylinder */
while(InByte(0x03F4) & 0x80 == 0);
OutByte(head, 0x03F5); /* Head */
while(InByte(0x03F4) & 0x80 == 0);
OutByte(sector, 0x03F5); /* Sector */
while(InByte(0x03F4) & 0x80 == 0);
OutByte(2, 0x03F5); /* Sektorengrösse */
while(InByte(0x03F4) & 0x80 == 0);
OutByte(18, 0x03F5); /* Sektoren pro Spur */
while(InByte(0x03F4) & 0x80 == 0);
OutByte(0x1B, 0x03F5);
while(InByte(0x03F4) & 0x80 == 0);
OutByte(0xFF, 0x03F5);
WaitForFloppy();
while(InByte(0x03F4) & 0x80 == 0);
OutByte(0x00, 0x03F2);
PrintChar('!');
}
return ERROR_NO;
}
void WaitForFloppy()
{
while(operationDone == 0);
operationDone = 0;
}
ojemine...
hmmm...
Ich wusst nicht das jeder 19te Sektor wieder auf der anderen Seite leigt, nur das bei einer Diskette 18 Sektoren pro Spur Standart ist.
(...)
cylinder = lbaSector / 36
head = (lbaSector / 18) % 2
sector = lbaSector % 18 + 1
Out8Bit(0x0C, 0x03F2); /* Reset */
Out8Bit(0x18, 0x03F2); /* Motor starten */
while(In8Bit(0x03F4) != 0x80);
Ich habe oft gelesen, dass man DMA nicht benutzen sollte. Ich verstehe aber nicht warum. Hat das einen Nachteil? Geht das überhaupt ohne?
ZitatBeispiel:
Galileo Galilei (glaub ich) hat rausgefunden, dass die Erde NICHT im Mittelpunkt steht, sondern die Sonne.
Was hat man gemacht, man hat ihm verboten weiter zu forschen (oder zumindest seine Werke zu veröffentlichen)
"Böse Kirche!" -> einfach den Fortschritt aufhalten wollen (was sie aber niemals schaffen wird)
@elfish_rider: Was ist mit dir - glaubst du an die Urknall-Theorie?
1.
Galileo hatte es mit einer katholischen Kirche zu tun, wie ich sie hasse. Sie hatte damals ihren Hofastronomen (oder sowas) Galileos Entdeckungen überprüfen lassen. Der ist zum Schluss gekommen, dass sie stimmen! Trotzdem sah sich die Kirche an ihren Weltbild gerüttelt und wollte es nicht zugeben! Ich empfehle sehr das Drama "Leben des Galilei" von Bertolt Brecht, hat viele historische Fakten.
2.
Ja. Aber nur so als Beispiel, die Physiker können nicht erklären, was vor dem Urknall war. Es gibt zwar ultramoderne, hochkomplizierte Theorien, aber die versteh ich nicht, die sind komplizierter als Glaube und Kirche
OUTPUT_FORMAT("binary")
SECTIONS
{
. = 0x100000;
.text : { *(.text) }
.data : { *(.data) }
.bss : { *(.bss) }
Ending = SIZEOF(.text+.data);
}
INPUT(start1.o start2.o text.o)
DD Ending
OUTPUT_FORMAT("binary")
INPUT(start1.o start2.o)
SECTIONS
{
. = 0x100000;
.text : { *(.text) }
.data : { *(.data) }
.bss : { *(.bss) }
}
CPU 386
BITS 32
EXTERN _start
GLOBAL Start
MULTIBOOT_PAGE_ALIGN equ 1<<0
MULTIBOOT_MEMORY_INFO equ 1<<1
MULTIBOOT_AOUT_KLUDGE equ 1<<16
MULTIBOOT_HEADER_FLAGS equ MULTIBOOT_PAGE_ALIGN | MULTIBOOT_MEMORY_INFO | MULTIBOOT_AOUT_KLUDGE
CHECKSUM equ -(0x1BADB002 + MULTIBOOT_HEADER_FLAGS)
ALIGN 4
MultibootHeader:
DD 0x1BADB002
DD MULTIBOOT_HEADER_FLAGS
DD CHECKSUM
DD MultibootHeader
DD 0x00100000
DD 0x00200000
DD 0x00200000
DD Start
Start:
CALL _start
JMP $