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

Seiten: [1]
1
Lowlevel-Coding / Grub and VBE mode 800x600 16bit Farbtiefe
« am: 20. July 2006, 21:55 »
Hi,
Wie bekomme ich Grub dazu, dass er mir den Videomodus 800x600 mit 16Bit Farbtiefe einschaltet?
Ich habe Grub mit den VBE Mods... Mein Code sieht so aus, aber er färbt den Bildschirm net :(

; multiboot config
MBOOT_FLAGS     equ  MBOOT_PAGE_ALIGN | MBOOT_MEMORY_INFO | MBOOT_AOUT_KLUDGE | MBOOT_VIDEO_INFO

; start of file
_start_of_file:

; MBoot Header, 4-byte aligned
align 4, db 0
_mboot:
    dd MBOOT_MAGIC
    dd MBOOT_FLAGS
    dd 0 - MBOOT_MAGIC - MBOOT_FLAGS
    dd _mboot
    dd _start_of_file
    dd _end_of_data
    dd _end_of_file
    dd _entry_point
    dd 0
    dd 800
    dd 600
    dd 16

_entry_point:
   ; get VbePhysBasePtr
    mov     edx, dword [ebx+mbti_vbe_mode_info]
   
    mov     eax, dword [edx+VbeModePhysBasePtr]
    mov     dword [VbePhysBasePtr], eax

    ; color screen
    mov     edi, dword [VbePhysBasePtr]
    mov     eax, 0xCC
    mov     ecx, 600 * 800
    rep      stosd

; data section
VbePhysBasePtr dd 0
_end_of_data:
; bss section
_end_of_file


Die Labels mbti_vbe_mode_info und VbeModePhysBasePtr sind die entsprechenden Offsets in der Multiboot Struc bzw. VbeModeInfo Struc

Hier meine menu.lst:
timeout 8
default 0

title testOS
    root (fd0)
    kernel /boot/loader.gz
    vbematch 800 600 16


Könnt ihr mir da irgendwie weiterhelfen?

danke ;)
2
OS-Design / Frage zur Versionierung
« am: 12. July 2006, 19:13 »
Hi,

Ich habe da mal eine Frage zur Versionierung:
Wird die Revisionsnummer( patch level ) bei einer Änderung
der Haupt- oder Nebenversionsnummer( major oder minor release )
wieder auf Null gesetzt, oder beibehalten?
3
Lowlevel-Coding / Stack nach Exception
« am: 24. January 2006, 21:44 »
hiii...
Ich wollte mal fragen, ob mir jemand jetzt
mal genau sagen kann, was in welscher reihenfolge
beim auslösen einer Exception gepusht wird... ich hab
schon "überall" nachgesehen und "überall" steht was anderes

Danke
4
OS-Design / Mit GRUB Module laden lassen
« am: 11. January 2006, 18:59 »
Hi Leute,

Kann man mit GRUB sich Dateien an eine bestimmte Adresse laden lassen?
Also die Situation sieht folgendermaßen aus...
Ich lade mit GRUB meinen OS-Loader an eine bestimmte
Adresse und möchte zusätzlich noch ein Treiberfile an einer
anderen Adresse geladen haben.

Dann möchte ich, dass zu dem OS-Loader gesprungen wird
und dass das Treiberfile im Speicher ist, sodass ich es als
Prozess laden kann.

Ist dies mit GRUB realisierbar??

Danke schonmal für Hilfe
5
Lowlevel-Coding / Problem mit KeyBoard Handler
« am: 10. September 2005, 14:06 »
hi!
ich hab folgendes problem:
ich habe mir einen Keybhandler geschrieben und
warte auf einen tastendruck...( code folgt noch )

Wenn ich eine Taste drücke gibt bochs folgende
fehlermeldung aus:

"[KBD  ] internal keyboard buffer full (imm)"

Hier der Code... Bitte helft mir!!!

char _keyb_buf;
BOOL _key_in_buf = FALSE;
__keymap km = US;
int shift, caps=FALSE;

void update_keyb_leds() {
     if(caps)
     {
             while( ( inportb( KEY_REG_STATUS )  & 0x2 ) != 0 ) ;
             outportb( KEY_REG_DATA, 0xed );
             while( ( inportb( KEY_REG_STATUS )  & 0x2 ) != 0 ) ;
             outportb( KEY_REG_DATA, 0x4 );
     }
     else
     {
             while( ( inportb( KEY_REG_STATUS )  & 0x2 ) != 0 ) ;
             outportb( KEY_REG_DATA, 0xed );
             while( ( inportb( KEY_REG_STATUS )  & 0x2 ) != 0 ) ;
             outportb( KEY_REG_DATA, 0x0 );
     }
}

/* ======================== */

void keyboard_handler(struct _int_stack_regs *r) {
     int scancode;
     
     while ( ( inportb( KEY_REG_STATUS ) & 1 ) == FALSE ) ;
     while( ( inportb( KEY_REG_STATUS )  & 0x2 ) != 0 ) ;
     scancode = inportb( KEY_REG_DATA );
     
     if(scancode & KEY_RELEASE)
     {
         scancode&=0x7f;  
                       
         if( scancode == SC_LEFT_SHIFT || scancode == SC_RIGHT_SHIFT )
         {
             if(caps)
             shift = TRUE;
             else
             shift = FALSE;
         }
         update_keyb_leds();
         return;
     }
     if( scancode == SC_LEFT_SHIFT || scancode == SC_RIGHT_SHIFT )
     {
          if(caps)
          shift = FALSE;
          else
          shift = TRUE;
          update_keyb_leds();
          return;
     }
     if( scancode == SC_CAPS_LOCK )
     {
          shift = !shift;
          caps = !caps;
          update_keyb_leds();
          return;
     }

     if( !_key_in_buf ) {
       if( shift && km == US ) {
       _keyb_buf = kmUS_Shift[scancode];
       }
       else if ( !shift && km == US ) {
       _keyb_buf = kmUS_NonSh[scancode];
       }
       else if ( shift && km == GE ) {
       _keyb_buf = kmGE_Shift[scancode];
       }
       else if ( !shift && km == GE ) {
       _keyb_buf = kmGE_NonSh[scancode];
       }
       
       _key_in_buf=TRUE;
       
     }      
         
     update_keyb_leds();
}

/* ======================== */

void keyb_init() {
     irq_install_handler(1, keyboard_handler, "keyb_drv");
}

/* ======================== */

int getch(void) {
    int rv;
   
    while( !_key_in_buf ) ;
   
    rv = _keyb_buf;
    _key_in_buf = FALSE;
   
    return rv;
}

/* ======================== */


Ich initialisiere den Handler mit keyb_init();
und dann warte ich mit getch() auf einen taste..

wo liegt den bloß der fehler??
6
Lowlevel-Coding / Probleme mit dem VGA textmodus
« am: 27. July 2005, 15:26 »
hi leutz,
hab folgendes problem:
Ich schalte in den 320x200x256 Video Mode und
wenn ich in den Textmode 80x25 zurückschalte
hab ich überall punkte. die buchstaben werden
zwar dargestellt allerdings befinden sich darüber und
daneben überall punkte.

Hier der code mit dem ich in den VGAmodus schalte und zurück:


/* == der array mit den Werten für die VGA register... =*/
unsigned char g_80x25_text[] =
{
   80,25,0xb8,FALSE,
/* MISC */
0x67,
/* SEQ */
0x03, 0x00, 0x03, 0x00, 0x02,
/* CRTC */
0x5F, 0x4F, 0x50, 0x82, 0x55, 0x81, 0xBF, 0x1F,
0x00, 0x4F, 0x0D, 0x0E, 0x00, 0x00, 0x00, 0x50,
0x9C, 0x0E, 0x8F, 0x28, 0x1F, 0x96, 0xB9, 0xA3,
0xFF,
/* GC */
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0E, 0x00,
0xFF,
/* AC */
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
0x0C, 0x00, 0x0F, 0x08, 0x00
};
/* == der andere array == */
unsigned char g_320x200x256[] =
{
   32,20,0xa0,TRUE,
/* MISC */
0x63,
/* SEQ */
0x03, 0x01, 0x0F, 0x00, 0x0E,
/* CRTC */
0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0xBF, 0x1F,
0x00, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x9C, 0x0E, 0x8F, 0x28, 0x40, 0x96, 0xB9, 0xA3,
0xFF,
/* GC */
0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
0xFF,
/* AC */
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
0x41, 0x00, 0x0F, 0x00, 0x00
};


/* == die function die den modus wechselt == */
void vga_setmode( unsigned char* _mode )
{
unsigned i;

    _actual_mode.screenwidth = *_mode++;
    _actual_mode.screenheight = *_mode++;
    _actual_mode._vga_mem = ( *_mode++ << 12 );
    _actual_mode.graphics = *_mode++;

/* write MISCELLANEOUS reg */
outportb(VGA_MISC_REG_WRITE, *_mode++);

/* write SEQUENCER regs */
for(i = 0; i < VGA_NUM_SEQ_REGS; i++)
{
outportb(VGA_SEQ_REG_INDEX, i);
outportb(VGA_SEQ_REG_DATA, *_mode++);
}

/* unlock CRTC registers */
    crtc_sendbyte(  0x3, inportb( VGA_CRTC_REG_DATA ) | 0x80 );
    crtc_sendbyte( 0x11, inportb( VGA_CRTC_REG_DATA ) & ~0x80 );
   
/* make sure they remain unlocked */
_mode[0x03] |= 0x80;
_mode[0x11] &= ~0x80;
/* write CRTC regs */
for(i = 0; i < VGA_NUM_CRTC_REGS; i++)
{
crtc_sendbyte( i, *_mode++);
}
/* write GRAPHICS CONTROLLER regs */
for(i = 0; i < VGA_NUM_GC_REGS; i++)
{
grphc_sendbyte( i, *_mode++ );
}
/* write ATTRIBUTE CONTROLLER regs */
for(i = 0; i < VGA_NUM_AC_REGS; i++)
{
(void)inportb(VGA_INSTAT_READ);
attrc_sendbyte( i, *_mode++ );
}
/* lock 16-color palette and unblank display */
(void)inportb(VGA_INSTAT_READ);
outportb(VGA_AC_REG_INDEX, 0x20);


}
7
Lowlevel-Coding / Der CPUID Befehl
« am: 25. July 2005, 20:12 »
Hallo leutz,
Samma kann einer von euch mir mal ne komplette Referenz
über den CPUID Befehl geben...
Und kommt ja NICHT auf die Idee mich an intel weiterzuleiten...
Da komm ich grad weg...  :twisted:  Das ist ja n scheiß!
Da komm ich mit der Navigation nischt zu recht...  :?
8
OS-Design / memory map vom ersten MB des RAM
« am: 22. July 2005, 22:33 »
hey guys,
kann mir jemand mal 'ne memory map von dem ersten MB
des RAM machen?

Ich mein' was da so alles liegt (e.g. VideoMem, BIOS data area, etc. )
9
OS-Design / VGA modus setzen
« am: 06. June 2005, 20:44 »
hi leutz,
hab da folgendes problem:
Ich befinde mich im Protected Mode, Textmode, und möchte den VGA Mode X (320x240) aktivieren. Hab mir schon da was gedacht. Ich schalte den Modus einfach über die VGA register an. und genau da hörts schon auf... wie mach ich das??

Ich hoffe da kann mir jemand helfen, danke schonmal...
Seiten: [1]

Einloggen