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

Seiten: [1]
1
Lowlevel-Coding / Problem mit Cmos
« am: 10. October 2004, 15:13 »
Also, folgendes Problem:
Ich habe eine Funktion (in C) geschrieben mit der ich das Fehlerregister des CMOS-Speichers testen kann und, falls einen Fehler gibt, eine Nachricht ausgibt, in der die Fehlerursace beschrieben wird. Wenn ich das ganze kompiliere und dann in Bochs testen möchte, macht er sobald der Computer das CMOS-Register überprüft hat einen, mir völlig unerklärlichen,  reboot.
Was mach ich da falsch? Hier mal der code:
cmos.c:

void check_cmos(void)
{
    unsigned char value;
    print("Checking CMOS for errors...");
    out(0x70, 0x0E);                        
    value = in(0x71);
    if (value == 0)    /* If 0 -> everything is all-right. */
    {
        print("CMOS [OK]");
    }
    else                /* If not -> there MUST be an error. */
    {
        print("CMOS ERROR:");
        switch(test_bit(value, 2))
        {
            case 0: break;
            case 1: print("Invalid time or data."); break;
        }
        switch(test_bit(value, 3))
        {
            case 0: break;  
            case 1: print("Disk or controller error."); break;
        }
        switch(test_bit(value, 4))
        {
            case 0: break;
            case 1: print("Memory size compare error."); break;
        }
        switch(test_bit(value, 5))
        {
            case 0: break;
            case 1: print("Invalid POST-configuration."); break;
        }
        switch(test_bit(value, 6))
        {
            case 0: break;
            case 1: print("CMOS - Bad checksum."); break;
        }
        switch(test_bit(value, 7))
        {
            case 0: break;
            case 1: print("Clock lost power."); break;
        }                  
    }
}

-------------

Die in / out (für die Ports) funktionieren, ebenso die print-Funktion. Bei der Funktion test_bit bin ich mir nicht sicher, vielleicht liegt der Fehler auch da. Deswegen hier noch der Code der test_bit-Funktion:


bitops.c:

int test_bit(char val, char bit)
{
   char test_val = 0x01;    
   /* push bit to position */
   test_val = (test_val << bit);
   /* 0 = Bit setted 1 = Bit not setted */
   if ((val & test_val) == 0)
      return 0;                  /* not setted */
   else
      return 1;                  /* setted */
}

-----------

Danke schon mal im vorraus! :)
2
Offtopic / CF - Wie beschreibe ich den Bootsektor?
« am: 04. August 2004, 09:14 »
Hallo Jungs,
Ich bin noch ziemlich frisch in diesem Forum, wohl erst seit ca. 10 minuten angemeldet, und bums, ich hab auch schon ein Problem ;)
Also, da ich kein Diskettenlaufwerk habe, dafür aber einen Flashkartenleser von dem ich auch von Flashkarten bootenkann (bzw. könnte), würde ich ganz gerne wissen, wie ich bei solchen Karten jetzt den Bootsektor beschreiben kann. Ich hab jetzt mal Testweise ein Programm in Assembler geschrieben, welches ein Laufwerk (Diskette, Festplatte oder eben Flashkarte) Sektor für Sektor ausliest. An sich nicht schlimm, nur Windows (XP) verhindert den Zugriff mit dieser Meldung:
[qoute]16-Bit-MS-DOS-Teilsystem
;hier steht der name des programms (und pfad)
Eine Anwendung hat versucht, auf die Festplatte direkt zuzugreifen. Dies wird nicht unterstützt. [...] [/qoute]
Jetzt meine Frage: Wie kann ich das umgehen, oder anders hinbekommen, das Windows das ausnahmsweise mal zulässt?

Danke schon einmal im Vorraus!
Seiten: [1]

Einloggen