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

Seiten: [1]
1
Softwareentwicklung / Android Emulierung
« am: 14. November 2013, 19:32 »
Hallo liebe Gemeinde,

ich habe Interesse an einem Android Emulator, der allerdings nicht das ganze System emuliert, sondern nur die .apk-Dateien ausführen kann.
Es sollte sowas in der Art wie Bluestacks sein. Da ich die Android Apps auf meinem Windows Phone nutzen möchte, wollte ich wissen ob ihr irgendeine Ahnung habt welche packages ich bereitstellen muss oder ob ihr eine Ahnung habt wie dieses Bluestacks programmiert ist.
Die Möglichkeit sowas zu machen ist vorhanden, man muss sie nurnoch als App umsetzen.
Ich habe bereits einige Windows Phone Apps programmiert.

Könnt ihr mir helfen, soetwas umzusetzen?

Danke für Eure Hilfe!

Gruß
MrTom3715

Der Link zu Bluestacks: http://www.bluestacks.com/

EDIT: Ich hatte vor den Android Source zu laden, bevor mir in den Sinn kam, dass es ziemlich lang dauern würde sich rein zu arbeiten.
2
Lowlevel-Coding / PFLASH: Possible BUG - Write block confirm
« am: 21. June 2013, 16:14 »
Hallo,

ich habe mal wieder ein Problem...

Ich habe es jetzt geschaft die Tastatur zu aktivieren, aber wenn ich eine Endlosschleife mit einer Abfrage von Port 0x60 programmmiere, entsteht folgender Error:

PFLASH: Possible BUG - Write block confirm

Qemu stürzt einfach ab.

Hier ist mein Log:
http://pastebin.com/EF2F58eQ

Ich kenne mich leider nicht mit dem Auswerten eines QEMU-Logs aus.

Kann mir jemand sagen wo mein Fehler liegen könnte?
An der Schleife liegt es definitiv nicht.


MrTom3715
3
Lowlevel-Coding / Ständiges Rebooten mit outb() und inb()
« am: 20. June 2013, 18:52 »
Hallo,

ich habe mich mal wieder hingesetzt und versucht einen Tastaturtreiber zu entwerfen, damit man auch was machen kann...

Leider wird ständig ein Reboot ausgeführt.


Meine Tastatur-Initialisierung:
void keyboard_init(void)
{
while ((inb(0x64) & 0x1)) {}

 
     
// Tastatur aktivieren
send_command(0xF4);

kprintf("Tastatur initialisiert!");
}

void send_command(uint8_t command)
{
while ((inb(0x64) & 0x2)) {}
outb(0x60, command);
}

Kommentiere ich die while-Schleife und send_command in keyboard_init() aus funktioniert alles normal.
Ich vermute, dass es an inb() und outb() liegt.

Hier mein Code für inb() und outb():
void outb(unsigned short _port, unsigned char _data)
{
__asm__ ("outb %0, %1" : : "a" (_data), "Nd" (_port));
}

unsigned char inb(unsigned short _port)
{
unsigned char result;
__asm__ ("inb %1, %0" : "=a" (result) : "Nd" (_port));
return result;
}

Der Compiler zeigt keine Fehler an.
Weiß jemand was das Problem ist und wie ich es beheben kann?

Schonmal Danke :-)

MrTom3715
4
Lowlevel-Coding / kprintf - Problem
« am: 13. January 2013, 13:16 »
Hallo,

ich hab vor mein System aufzuräumen bleibe aber bei printf hängen.
Das Steuerzeichen /n funktioniert nicht.  :cry:
Bin mit meinem Latein am Ende.

Hier der Code:
void putc(char c)
{
video[(cursor_y * SCREEN_WIDTH) + cursor_x * 2] = c;
video[(cursor_y * SCREEN_WIDTH) + cursor_x * 2 + 1] = color;
cursor_x++;
printf_res++;
checkcursor();
}

void puts(const char* s)
{
while (*s)
{
putc(*s++);
}
}

void putn(unsigned long t, int s)
{
const char* symbol = "0123456789abcdefghijklmnopqrstuvwxyz";
char buffer[65];
char* r;

if (s > 36)
{
return;
}
r = buffer + 64;
*r = '\0';
do
{
*--r = symbol[t % s];
t /= s;
}
while (t);
puts(r);
}

int printf(const char* fmt, ...)
{
va_list ap;
const char* s;
unsigned long n;
va_start(ap, fmt);
printf_res = 0;

while (*fmt)
{
if (*fmt == '%')
{
fmt++;
switch (*fmt)
{
case 's':
s = va_arg(ap, char*);
puts(s);
break;
case 'p':
case 'x':
n = va_arg(ap, unsigned long int);
putn(n, 10);
break;
case 'd':
case 'u':
n = va_arg(ap, unsigned long int);
putn(n, 10);
break;
case '%':
putc('%');
break;
case '\0':
goto end;
default:
putc('%');
putc(*fmt);
break;
}
}
else if(*fmt == '\n')
{
cursor_y++;
cursor_x = 0;
checkcursor();
}
else if(*fmt == '\t')
{
if(cursor_x > SCREEN_WIDTH - TABULATOR_WIDTH)
{
cursor_x = 0;
cursor_y++;
checkcursor();
}
else
{
cursor_x = cursor_x + TABULATOR_WIDTH;
}
}
else if (*fmt == '\b')
{
cursor_x--;
video[(cursor_y * SCREEN_WIDTH) + cursor_x * 2] = ' ';
}
else if (*fmt == '\r')
{
cursor_x = 0;
}
else if (*fmt == '\v')
{
if(cursor_y > SCREEN_HEIGHT - TABULATOR_HEIGHT)
{
scrolldown(SCREEN_HEIGHT - cursor_y);
}
else
{
cursor_x = 0;
cursor_y = cursor_y + TABULATOR_HEIGHT;
}
}
else if (*fmt == '\f')
{
cls();
}
else if (*fmt == '\\')
{
video[(cursor_y * SCREEN_WIDTH) + cursor_x * 2] = 0x5C;
video[(cursor_y * SCREEN_WIDTH) + cursor_x * 2 + 1] = color;
cursor_x++;
}
else
{
putc(*fmt);
}
fmt++;
}
end:
va_end(ap);
return printf_res;
}

Ich hoffe ihr könnt mir helfen.


MrTom3715
5
Softwareentwicklung / CPU Register auslesen
« am: 08. January 2013, 18:46 »
Hallo,

ich bin gerade dabei mein "Bluescreen" zu programmieren.
Eax, ebx, ecx, edx, esi und edi kann ich schon in eine Variable schreiben und diese ausgeben.
Wie mache ich das aber nun mit ebp, eip, esp, cs, ss und Flags?

Eax wird ja so ausgelesen:
asm volatile ("inb  %%dx, %%al" : "=a" (n) : );
Wie muss ich den Ausgabeparameter ändern um ebp, eip, esp, cs, ss und Flags in die Variable n zu schreiben.

Ändert das Verfahren, das ich oben angewendet habe, auch die Register?


MrTom3715
6
Lowlevel-Coding / Probleme mit der IDT
« am: 04. January 2013, 20:46 »
Hallo,
ich bin gerade dabei die IDT zu programmieren, habe aber ein Problem.
Wenn ich kompilieren will meldet mir das Terminal, dass bei
static uint64_t idt[IDT_ENTRIES];IDT_ENTRIES nicht deklariert ist.

Hier meine ganze idt.c:
#ifndef INCLUDE_idt_H
#define INCLUDE_idt_H

#include "types.h"
#include "console.h"

//Exceptions:
extern void intr_stub_0();
extern void intr_stub_1();
extern void intr_stub_2();
extern void intr_stub_3();
extern void intr_stub_4();
extern void intr_stub_5();
extern void intr_stub_6();
extern void intr_stub_7();
extern void intr_stub_8();
extern void intr_stub_9();
extern void intr_stub_10();
extern void intr_stub_11();
extern void intr_stub_12();
extern void intr_stub_13();
extern void intr_stub_14();
extern void intr_stub_15();
extern void intr_stub_16();
extern void intr_stub_17();
extern void intr_stub_18();
extern void intr_stub_19();
//Interrupt-Requests:
extern void intr_stub_32();
extern void intr_stub_33();
extern void intr_stub_34();
extern void intr_stub_35();
extern void intr_stub_36();
extern void intr_stub_37();
extern void intr_stub_38();
extern void intr_stub_39();
extern void intr_stub_40();
extern void intr_stub_41();
extern void intr_stub_42();
extern void intr_stub_43();
extern void intr_stub_44();
extern void intr_stub_45();
extern void intr_stub_46();
extern void intr_stub_47();
//Syscalls:
extern void intr_stub_48();


static uint64_t idt[IDT_ENTRIES];

struct {
unsigned short int limit;
void* pointer;
} __attribute__((packed)) idtp = {
.limit = IDT_ENTRIES * 8 - 1,
.pointer = idt,
};


struct cpu_state {
unsigned long eax;
unsigned long ebx;
unsigned long ecx;
unsigned long edx;
unsigned long esi;
unsigned long edi;
unsigned long ebp;

unsigned long intr;
unsigned long error;

unsigned long eip;
unsigned long cs;
unsigned long eflags;
unsigned long esp;
unsigned long ss;
};



static void set_idt_entry(int i, unsigned long long base, unsigned int selektor, int flags)
{
idt[i] = base & 0xffff;
idt[i] |= (selektor & 0xffff) << 16;
idt[i] |= (flags & 0xffLL) << 40;
idt[i] |= ((base >> 16) & 0xffff) << 48;
}

void init_idt(void)
{
//set_idt_entry(0, (uint32_t)int_handler, 0x8, IDT_FLAG_RING0 | IDT_FLAG_PRESENT);
//set_idt_entry(0, (uint32_t)int_handler, 0x8, 0x8e);
//Exceptions:
set_idt_entry(0, (uint32_t)intr_stub_0, 0x8, 0x8e);
set_idt_entry(1, (uint32_t)intr_stub_1, 0x8, 0x8e);
set_idt_entry(2, (uint32_t)intr_stub_2, 0x8, 0x8e);
set_idt_entry(3, (uint32_t)intr_stub_3, 0x8, 0x8e);
set_idt_entry(4, (uint32_t)intr_stub_4, 0x8, 0x8e);
set_idt_entry(5, (uint32_t)intr_stub_5, 0x8, 0x8e);
set_idt_entry(6, (uint32_t)intr_stub_6, 0x8, 0x8e);
set_idt_entry(7, (uint32_t)intr_stub_7, 0x8, 0x8e);
set_idt_entry(8, (uint32_t)intr_stub_8, 0x8, 0x8e);
set_idt_entry(9, (uint32_t)intr_stub_9, 0x8, 0x8e);
set_idt_entry(10, (uint32_t)intr_stub_10, 0x8, 0x8e);
set_idt_entry(11, (uint32_t)intr_stub_11, 0x8, 0x8e);
set_idt_entry(12, (uint32_t)intr_stub_12, 0x8, 0x8e);
set_idt_entry(13, (uint32_t)intr_stub_13, 0x8, 0x8e);
set_idt_entry(14, (uint32_t)intr_stub_14, 0x8, 0x8e);
set_idt_entry(15, (uint32_t)intr_stub_15, 0x8, 0x8e);
set_idt_entry(16, (uint32_t)intr_stub_16, 0x8, 0x8e);
set_idt_entry(17, (uint32_t)intr_stub_17, 0x8, 0x8e);
set_idt_entry(18, (uint32_t)intr_stub_18, 0x8, 0x8e);
set_idt_entry(19, (uint32_t)intr_stub_19, 0x8, 0x8e);
//IRQs:
set_idt_entry(32, (uint32_t)intr_stub_32, 0x8, 0x8e);
set_idt_entry(33, (uint32_t)intr_stub_33, 0x8, 0x8e);
set_idt_entry(34, (uint32_t)intr_stub_34, 0x8, 0x8e);
set_idt_entry(35, (uint32_t)intr_stub_35, 0x8, 0x8e);
set_idt_entry(36, (uint32_t)intr_stub_36, 0x8, 0x8e);
set_idt_entry(37, (uint32_t)intr_stub_37, 0x8, 0x8e);
set_idt_entry(38, (uint32_t)intr_stub_38, 0x8, 0x8e);
set_idt_entry(39, (uint32_t)intr_stub_39, 0x8, 0x8e);
set_idt_entry(40, (uint32_t)intr_stub_40, 0x8, 0x8e);
set_idt_entry(41, (uint32_t)intr_stub_41, 0x8, 0x8e);
set_idt_entry(42, (uint32_t)intr_stub_42, 0x8, 0x8e);
set_idt_entry(43, (uint32_t)intr_stub_43, 0x8, 0x8e);
set_idt_entry(44, (uint32_t)intr_stub_44, 0x8, 0x8e);
set_idt_entry(45, (uint32_t)intr_stub_45, 0x8, 0x8e);
set_idt_entry(46, (uint32_t)intr_stub_46, 0x8, 0x8e);
set_idt_entry(47, (uint32_t)intr_stub_47, 0x8, 0x8e);
//Syscalls:
set_idt_entry(48, (uint32_t)intr_stub_48, 0x8, 0x8e);

load_idt();
}

void load_idt(void)
{
asm volatile("lidt %0" : : "m" (idtp));
}

void int_handler(void)
{
kprintf("Ein Interrupt!\n");
while(1);
}

#endif

Was habe ich falsch gemacht?

Danke für eure Antworten.


MrTom3715
7
Softwareentwicklung / Includedateien & Co in verschiedene Ordner
« am: 04. January 2013, 20:32 »
Hallo,
ich habe jetzt schon einige Sachen programmiert.
Nun schaue ich meinen Source Ordner an und sehe nichts.
Kann ich mein Makefile ändern das ich z.B. die Includedateien in einen Ordner gebe und die Funktionen in einen anderen?
Muss ich dann auch noch etwas an den Dateien verändern??

Danke schon im Vorraus.

MrTom3715
8
Lowlevel-Coding / kprintf - Steuerzeichen
« am: 10. November 2012, 21:51 »
Hallo Liebe Community,

ich habe jetzt geschafft Hello World zu schreiben nur ich weiß nicht wie ich "\n" implementieren soll.
Ich hoffe ihr könnt mir helfen.


MrTom3715
Seiten: [1]

Einloggen