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

Seiten: [1]
1
Softwareentwicklung / Linux Cross Compiling - Win32
« am: 08. December 2012, 20:39 »
Hallo,

ich versuche schon seit 2 Tagen .exe Dateien für Winodws 32 Bit unter Linux zu erstellen.
Leider ohne Erfolg.
Ich bekomme folgende Meldung:

root@kalli:/home/jkallup# gcc-mingw32 -m32 -Wa,--32 -Wl,--oformat,pe-i386 -o test.o -c test.c
Assembler messages:
Fatal error: selected target format 'pe-i386' unknown
root@kalli:/home/jkallup#

was kann man dagegen tun?

Danke
paule
2
Lowlevel-Coding / einfache fseek implementation
« am: 01. December 2012, 16:53 »
Hallo,

habe vor, mein Eignes OS zu programmieren.
Jetzt bin ich soweit, um ein Verzeichnis von einen CD Rom ISO Image auszulesen.
Nagut, fast :-)

wie man hier sehen kann, lese ich eine Struktur ab Sektor 23 einer CD aus:

struct directory_record
{
  char res1[108]; //res1[108+46]; +46 = nächster Eintrag
 
  WORD version;
  WORD sector;
  WORD sector_opt1;
  WORD sector_opt2;
  WORD sector_opt3;
 
  WORD length;
  WORD length_opt1;
  WORD length_opt2;
  WORD length_opt3;
 
  BYTE year;
  BYTE month;
  BYTE day;
 
  BYTE hour;
  BYTE minute;
  BYTE second;
 
  BYTE res2;
  BYTE flag;
 
  char res3[6];
 
  uint8_t ident_length;
  char ident[12];
} DIR_RECORD;
 
 
struct disk_packet
{
    byte size_pack;
    byte reserved1;
    byte no_of_blocks;
    byte reserved2;
    word offset;
    word segment;
    dword lba1;
    dword lba2;
} __attribute__((packed)) disk_pack;
 
 
void LBASectorRead(void *buffer, unsigned long lba)
{
    unsigned char bError = 0;
    REGS regs;
 
    disk_pack.size_pack = 16;
    disk_pack.no_of_blocks = 1;
    disk_pack.reserved1 = 0;
    disk_pack.reserved2 = 0;
    disk_pack.segment = (((unsigned int)buffer >> 16) << 12);
    disk_pack.offset = ((unsigned int)buffer & 0xffff);
    disk_pack.lba2 = lba >> 32;
    disk_pack.lba1 = lba & 0xffffffff;
 
regs.b.ds = (((unsigned int)&disk_pack >> 16) << 12);
regs.b.si = ((unsigned int)&disk_pack &0xffff);
regs.b.dl = 0x9f;
regs.b.ah = 0x42;
int386(0x13,&regs,&regs);
}
 
 
struct directory_record dr[2];
LBASectorRead( &dr,23);
 
printf("Verzeichnisstruktur .root:");
nl();
 
int count;
for (count = 0; count < 3; count++)
{
//if (dr[count].version == 0) break;
 
if (dr[count].flag == 0)
{ dr[count].ident[dr[count].ident_length-2] = '\0'; } else
{ dr[count].ident[dr[count].ident_length-0] = '\0'; }
 
printf("%02d.%02d.%02d %02d:%02d:%02d %8d %s",
dr[count].day,
dr[count].month,
dr[count].year+1900,
dr[count].hour,
dr[count].minute,
dr[count].second,
dr[count].length,
dr[count].ident);
 
nl();
}

Leider ist aber ein Verzeichnis Eintrag 46 Byte groß.
Also müsste ich beim nächsten einlesen 108 + 46 Byte vorwärts gehen.
Wenn ich das wie in den Code mache, dan reserviere ich ja Speicher (2 * 108) ****?
anstatt 2 * 46.

Wie ist es nun möglich, die Struktur Member res1[108] aus der Struktur zu entfernen,
so dass die dann wirklich nur 46 Bytes groß ist.
Es müsste also eiine Impplementation eines "einfachen" fseek, die dann auf Sektor 23
zeigt, 108 Bytes einliesst, geben ....

Hat da einer von Euch eine Idee?
Danke schonmal
3
Lowlevel-Coding / MyOS - CDROM Verzeichnis auslesen
« am: 26. November 2012, 22:47 »
Hallo,

hier der Source und das Image(ISO) von MyOS.
Im Moment stecke ich am Auslesen der Verzeichnisse der CDROM fest.
Kann da einer Helfen?

Hier der Link

http://www1.zippyshare.com/v/27224402/file.html

Kompiliert mit MinGW (win32 - XP)
Getestet unter VM Ware Player

Danke
Seiten: [1]

Einloggen