Autor Thema: Problem mit CommOs  (Gelesen 5032 mal)

Stephan S.

  • Beiträge: 19
    • Profil anzeigen
    • http://www.the-hannibal.de
Gespeichert
« am: 29. April 2005, 15:05 »
Hi Leute,

Ich hab ein Proglem mit CommOs. Habs geschafft, nach ein paar kleinen Änderungen, das Teil zum laufen zu bringen. Habe den Bootloader verändert, dass er auch auf meinem Pentium 2 läuft. Hab dazu im Bootloader die Segmentregister upgedatet, da sich der PC sonst aufgehängt hat.
Hab aus der Boot.ini den Vesa Mode rausgelöscht. Nun hab ich folgende Kernel.c:

/////////////////////////////////////////////////////////////////////
//  Basic code written by Roshl                                    //
//  Edited by:                                                     //
//  Changes:                                                       //
/////////////////////////////////////////////////////////////////////

//#include "datatypes.h"
//#include "bootupinfo.h"

#define KRNL_POS  0x10000

void main()
{

     char *Text = "Welcome to Protected Mode";
     char *VideoMem = (char*)0xB8000;
     while(*Text)
     {
     *VideoMem = *Text;
     *VideoMem++;
     *VideoMem = 7;
     *VideoMem++;
     *Text++;
     }
 for (;;);
    return;
}


Der Code müsste doch eigentlich Zeichen in den Videoram schreiben. Leider passiert garnix. Der Bootloader scheint aber zu funktionieren.
Der Code funktioniert auf meinem PC, meinem DOS-PC und auf dem Bochs nicht.

Hab für den Videoram auch schon den Wert 0xA8000 ausprobiert mit dem selben Ergebnis.
Hab am Linkscript nix geändert.

Der Disassembler spuckt bei der Disassemblierung der kernel.c folgenden Code aus:

C:\nasm>ndisasmw -u kernel.bin -e 138
00000000  55                push ebp
00000001  B970000100        mov ecx,0x10070
00000006  89E5              mov ebp,esp
00000008  BA00800B00        mov edx,0xb8000
0000000D  803D7000010000    cmp byte [0x10070],0x0
00000014  740F              jz 0x25
00000016  8A01              mov al,[ecx]
00000018  41                inc ecx
00000019  8802              mov [edx],al
0000001B  42                inc edx
0000001C  C60207            mov byte [edx],0x7
0000001F  42                inc edx
00000020  803900            cmp byte [ecx],0x0
00000023  75F1              jnz 0x16
00000025  EBFE              jmp short 0x25
00000027  90                nop
00000028  90                nop
00000029  90                nop
0000002A  90                nop
0000002B  90                nop
0000002C  90                nop
0000002D  90                nop
0000002E  90                nop
0000002F  90                nop
00000030  90                nop
00000031  90                nop
00000032  90                nop
00000033  90                nop
00000034  90                nop
00000035  90                nop


Was mache ich falsch?
Haupt-PC: Athlon XP 1800+, 768 MB RAM, WinXP, Firefox

Neben-PC:
PII 350Mhz, 128MB RAM, DOS 6.22

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #1 am: 29. April 2005, 16:03 »
1. das CommOS soll rein Grafik werden KEIN TEXT, das wurde im ersten und bisher einzigen Chattreffen so festgelegt
2. *Text++; <-das da ist falsch du inkrementierst damit den wert und nich den pointer also den stern wegmachen
selbiges gilt bei den videomem's
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Stephan S.

  • Beiträge: 19
    • Profil anzeigen
    • http://www.the-hannibal.de
Gespeichert
« Antwort #2 am: 29. April 2005, 16:28 »
Zu 1.

Ich weiss doch. Ich habs nur zum testen benutzt, um festzustellen, ob das ganze funktioniert.

Zu 2.
 :oops:
Haupt-PC: Athlon XP 1800+, 768 MB RAM, WinXP, Firefox

Neben-PC:
PII 350Mhz, 128MB RAM, DOS 6.22

 

Einloggen