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

Seiten: 1 2 [3] 4
41
OS-Design / Mit GRUB Module laden lassen
« am: 11. January 2006, 20:55 »
Ja ich weiß schon, was ein multibootheader ist, ... :twisted:  :wink:
und wo in der multiboot_info struct steht dann wo
sich das modul bzw. die module befinden?


/* The Multiboot information.  */
typedef struct multiboot_info
{
   unsigned long flags;
   unsigned long mem_lower;
   unsigned long mem_upper;
   unsigned long boot_device;
   unsigned long cmdline;
   unsigned long mods_count;
   unsigned long mods_addr;
   union
   {
      aout_symbol_table_t aout_sym;
      elf_section_header_table_t elf_sec;
    } u;
    unsigned long mmap_length;
    unsigned long mmap_addr;
} multiboot_info_t;


Das isse doch, oder? Und wo steht das nun drin??[/code]
42
OS-Design / Mit GRUB Module laden lassen
« am: 11. January 2006, 20:30 »
aah... interressant... gut, gut danke...
Aber das passt mir nich, dass die hinter den
Kernel geladen werden *hrmpf*, weil das
meine ganze Speicherplanung durcheinander
bringt... Muss ich wohl doch n FDC Treiber in
den Loader integrieren *mist*

Andererseits, wenn ich n 4KB align damit hinkrieg...
Könnte ich das doch n bissl umbauen...

Wie mach ich das denn mit dem 4KB align??
Mit dem NASM geht das doch soweit ich weiß
nich, oder?
43
OS-Design / Mit GRUB Module laden lassen
« am: 11. January 2006, 19:26 »
soweit ich weiß gibt es doch, wenn mein die menu.lst editiert
so'ne anweisung die heißt module <dateiname>... was bewirkt
die denn?? Außerdem hab ich irgendwo hier im Forum gelesen,
dass das möglich ist, es wurde nur nich beschrieben wie...
44
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
45
Lowlevel-Coding / Problem mit KeyBoard Handler
« am: 18. September 2005, 11:44 »
so, ich hab nun mal ein bissl rumgegooglet und
gemerkt, dass ich vllt mal den internen(?) Keyboard
Buffer flushen sollte...

Hat da jemand ein stückchen code für mich??
Oder irgendwas anderes??

Danke an alle die mir schon geholfen haben...
46
Lowlevel-Coding / Problem mit KeyBoard Handler
« am: 17. September 2005, 10:22 »
Hier mal die bochssrc-file:

romimage: file=$BXSHARE/BIOS-bochs-latest, address=0xf0000
megs:32
vgaromimage: $BXSHARE/VGABIOS-elpin-2.40
floppya: 1_44=A:, status=inserted
floppyb: 360k="D:\Downloads\floppy images\Win95 Starting Disk.img", status=inserted


floppy_bootsig_check: disabled=1
log: bochsout.txt
vga_update_interval: 300000
keyboard_serial_delay: 250
keyboard_paste_delay: 100000
floppy_command_delay: 500

ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata1: enabled=1, ioaddr1=0x170, ioaddr2=0x370, irq=15

ata0-master: type=disk, mode=flat, path="G:\g.img", cylinders=615, heads=6, spt=17
ata1-master: type=cdrom, path="E:", status=inserted
ata1-slave: type=cdrom, path="F:", status=inserted

clock: sync=realtime, time0=local

mouse: enabled=0

private_colormap: enabled=0

fullscreen: enabled=0
#screenmode: name="sample"

keyboard_mapping: enabled=0, map=x11-pc-de.map
boot: a


Vielleicht hilft das ja...
47
Lowlevel-Coding / Problem mit KeyBoard Handler
« am: 14. September 2005, 15:11 »
Warum helft ihr mir nich??
Hat einer schonmal den selben Fehler gehabt??
Weiß einer wie man den beheben kann??

Bitte Helft Mir Doch!!!!!! :o
48
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??
49
Lowlevel-Coding / tastatur-'treiber'..
« am: 01. September 2005, 19:21 »
ich hätte da vllt noch ne verbesserung für deine ISR:
Ich würd' des mit den scancode to ascii mit 'nem vector
machen, des spart einfach code. z.B. so:

_keyb_table db 0,0x1b,...; <- hier alle ascii-zeichen eintragen...

und dann kannzu mit:

[_key_table+scancode], drauf zugreifen...

Is doch praktisch, oder??
50
Lowlevel-Coding / Probleme mit dem VGA textmodus
« am: 25. August 2005, 20:41 »
yo es lag an den font-tables!
Ex funktioniert juhuu  :shock:
thx to all!
51
Lowlevel-Coding / Probleme mit dem VGA textmodus
« am: 25. August 2005, 20:33 »
ooopps, hat sich erledigt...
Da oben war ja der code *g* old confused
52
Lowlevel-Coding / Probleme mit dem VGA textmodus
« am: 22. August 2005, 20:27 »
Ich weiß, des kommt jetzt 'n bissl spät abba
Wie lade ich die font-tables neu??
Und an welche addy gehören die??
53
Lowlevel-Coding / Probleme mit dem VGA textmodus
« am: 13. August 2005, 18:47 »
yo, natürlich...
ich glaub es liegt wirklich an den fonts...
Die hab ich ja nich neu geladen...

Allerdings habe ich gehört die Fonts werden
nur von BIOS interrupts benutzt, oder?!?!
54
Lowlevel-Coding / C im Real-Mode
« am: 27. July 2005, 21:05 »
tjaa... wie du das implementierst bleibt wohl dir überlassen...
Die einfachste Möglichkeit währe zum Beispiel.


mov ax,0
int  0x16


Das wartet auf einen Tastendruck, und gibt in AL des gelesene
Zeichen zurück... Mit schleifen kannst du dann daraus sowas wie
ne gets() funktion machen. So kannst du allerdings nur strings
einlesen. Du müsstest dir auch noch ne Funktion coden die
in strings gespeicherte Zahlenwerte in Integer bzw. Floats umwandelt.
Dann hast du sowas wie scanf();

Ach und übrigens in C ist das auch nich viiiiel leichter, da du
dir auch ersmal n tastaturtreiber coden musst. Du kannst nich
einfach die Standard-Funktionen benutzen.
55
Lowlevel-Coding / C im Real-Mode
« am: 27. July 2005, 19:33 »
Ja sicher lässt sich ein segment dynamisch erstellen, nur
die COM-Datei selber MUSS imma 64KB groß sein.
Die C/C++ Compiler benutzen soweit ich weiß nich
das COM-Format, sondern das EXE-Format. Und wenn
der Code die 64KB-Marke überschreitet macht der compiler
einfach noch ein Segment auf und sorgt dafür, dass die
entsprechenden Sprünge oder Funktionsaufrufe zu FAR
Calls bzw. FAR Jumps werden um das andere segment zu
erreichen.
56
Lowlevel-Coding / C im Real-Mode
« am: 27. July 2005, 18:37 »
Das ist nicht ganz richtig:
COM-dateien müssen in ein segment passen und dürfen
folglich nich größer als 64KB sein(Übrigens ist die command.com
bei mir nur 52KB groß und so weit ich weiß ist das weniger als 64KB
oder?!  :D ).
Diese Memory-Models(e.g. TINY, SMALL, MEDIUM, etc.)
haben nichts mit COM-dateien zutun. Diese Memory-Models
sind nur vorgefertigte Segmente für EXE-dateien.

e.g. ersetzt dieser Code:

.MODEL SMALL
.DATA
...
.CODE
...
END

folgenden:

DATA SEGMENT
...
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA
...
CODE ENDS

Man sieht hier sehr gut, dass diese Memory-Models nur
verkürzte Anweisungen sind.
57
Lowlevel-Coding / GDT haut alles durcheinander
« am: 27. July 2005, 17:19 »
hi,
Ich würd' ma sagen das ist nich NASM,
da stimmt was mit deinem Linkerscript nich...
Sicher bin ich mir da abba nich...

Poste ma den Kernel und das Script...
58
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);


}
59
Lowlevel-Coding / Der CPUID Befehl
« am: 25. July 2005, 20:45 »
thx, thx, ...

@blueXseven:
Wie hast du das mit der Intel-site bloß hinbekommen?? :shock:
Hab' da stundenlang dran rumprobiert...  :D
60
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...  :?
Seiten: 1 2 [3] 4

Einloggen