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

Seiten: 1 [2] 3
21
Lowlevel-Coding / Komisches PM Problem
« am: 02. June 2007, 10:54 »
Ich überarbeite gerade meinen Kernel; Allerdings gibt es jetzt probleme mit dem Wechsel in den PM.

code:
[Bits 16]
[org 0x2000]

;...

GDT_START:

  gdt_NULL:
      dd 0
      dd 0

   
  gdt_CODE:
     dw 0xFFFF
     dw 0
     db 0
     db 10011010b ; 0x9A
     db 11001111b ; 0xCF
     db 0

  gdt_DATA:
     dw 0xFFFF
     dw 0
     db 0
     db 10010010b ; 0x92
     db 11001111b ; 0xCF
     db 0

  gdt_VRAM:
     dw 0x0F9F
     dw 0x8000
     db 0x0B
     db 10010010b ; 0x92
     db 00000000b ; 0x00
     db 0x00

GDT_END:

GDT_DESC:
   limit dw GDT_END - GDT_START - 1
   base  dd GDT_START


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Selectoren                         ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

nullsel  equ 000000000000000b
codesel  equ 000000000001000b
datasel  equ 000000000010000b
vramsel  equ 000000000011000b


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PMode                              ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

EnablePMode:
   PM0:
    cli
    lgdt [GDT_DESC] ; GDT laden
   
   PM1:
    mov eax, cr0 ; Das CR0 Register in eax laden
    or  eax, 1   ; Das 0. Bit (PE Bit) auf 1 setzen
    mov cr0, eax ; Den neuen Wert in CR0 laden

   
    jmp long codesel:PM2+0x10000  ;#Hier wird rebootet#

[Bits 32]
   PM2:
    jmp PM2

Debuginformationen (von mir (ein echter PC))
16 Bit Kernel

cs: 0x00001000
ds: 0x00001000

PM-Wechsel:

limit: 0x0000001F
base:  0x00002107
GDT@:  0x00002107 bis 0x00002127
desc@: 0x00002127
PMen@: 0x000021BC

lgdt [OK]
pmen [OK]

cr0:   0x00000011
j2PM@: 0x000021FB

#Hier wird rebootet#

Debuginformationen (von Bochs)
00003425503e[CPU0 ] jump_protected: gate type 0 unsupported
00003425503e[CPU0 ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting
...
00004191636i[CPU0 ] real mode
00004191636i[CPU0 ] CS.d_b = 16 bit
00004191636i[CPU0 ] SS.d_b = 16 bit
00004191636i[CPU0 ] | EAX=ffff040a  EBX=0000ce3c  ECX=000a0004  EDX=00000402
00004191636i[CPU0 ] | ESP=0000ff5e  EBP=0000ff62  ESI=0000733c  EDI=00007362
00004191636i[CPU0 ] | IOPL=0 NV UP DI PL ZR NA PE NC
00004191636i[CPU0 ] | SEG selector     base    limit G D
00004191636i[CPU0 ] | SEG sltr(index|ti|rpl)     base    limit G D
00004191636i[CPU0 ] |  CS:f000( 0000| 0|  0) 000f0000 0000ffff 0 0
00004191636i[CPU0 ] |  DS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
00004191636i[CPU0 ] |  SS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
00004191636i[CPU0 ] |  ES:07c0( 0000| 0|  0) 00007c00 0000ffff 0 0
00004191636i[CPU0 ] |  FS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
00004191636i[CPU0 ] |  GS:0000( 0000| 0|  0) 00000000 0000ffff 0 0
00004191636i[CPU0 ] | EIP=00000542 (00000541)
00004191636i[CPU0 ] | CR0=0x00000010 CR1=0 CR2=0x00000000
00004191636i[CPU0 ] | CR3=0x00000000 CR4=0x00000000

Komisch ist schon, das bochs noch im 16Bit modus zu sein scheint...
Der code hat so früher mal funktioniert, allerdings liegt er nun an einer Andern Positiom im speicher... Das habe ich aber eigentlich korrigiert, und de Debuginfos sind auch alle OK

Was ist falsch?? Wo muss ich den Fehler suchen??
22
Das Wiki / Wie kann man im wiki die News aktualisieren??
« am: 18. February 2007, 10:01 »
...
gestern wurde MenuetOS 64 version 0.58 released
http://www.menuetos.net/
23
Lowlevel-Coding / Problem mit Globaler Struktur
« am: 03. February 2007, 11:19 »
Ich habe eine Sturktur memlist. davon brauche ich 2 Globlame zeiger.
//...

namespace mem
{
 
 memlist *UsedMemory;
 memlist *UnusedMemory;

//...

Wenn ich jetzt in der Funktion SetupMM() den Zeigern eine Adresse zuweise, wird geht diese nach beendigung der Funktion wieder verloren, und UsedMemory & UnusedMemory zeigen auf 0x0

//...

 bool SetupMM()
 {
  UsedMemory   = (memlist*)MEM_USEDMEMLIST;
  UnusedMemory = (memlist*)MEM_UNUSEDMEMLIST;

//...

warum?? wie kann ich meinen Compiler dazu bringen, nicht immer so'n scheiß zu machen??

Verwende gpp 3.2.3
24
Lowlevel-Coding / C -> ASM -> C (argumente & return)
« am: 20. January 2007, 11:26 »
Hi

Ich möchte von C aus eine ASM-Funktion aufrufen, und dieser ein Argument mitgeben. Diese ASM-Funktion soll nun eine C-Funktion aufrufen, und an dieser das Arguiment weiterleiten.

1. C-Funktion
   reosappi = (int (*)(int))address;
   int retvalue = reosappi((int)&api);

Die Funktion "int reosappi(int argument);" wird aufgerufen
reosappi ist in ASM geschrieben:
start:

  pop eax  ; rücksprungadresse
  pop ebx  ; Argument 01
  push ebx ; Kopie von Argument 01 sichern
  push eax ; rücksprung-Adresse wieder zurück

  push ebx ;jetzt ist das argument für _main
  call _main
  add esp, 0x04 ;argument "löschen" (liegt noch auf'm stack)

  mov eax, 0x00FF00FF ;TEST
  ret

_main:
int main(int apiaddr)
{
 api = (int (*)(int,int)) apiaddr;
 int x = api(RAPI_TEST, 0);
 return x;
}

So nun zum Problem:
Die Funktion "int api(int,int) wird 2 mal aufgerufen!! (oder _main)
und der rückgabewert ist 0xFFFFFFFF anstatt des im ASM-teil festgekegten 0x00FF00FF...

Wo liegt der Fehler (vermutlich im ASM-Teil)
25
Lowlevel-Coding / Problem mit Globalem Objekt
« am: 29. December 2006, 19:14 »
Hi
Ich habe eine Klasse, um Debug-Informationen auszugeben.
Jetzt mochte ich ein Objekt dierser Klasse zum debuggen mehrer Funktionen nutzen. Deshalb muss das Objekt Global sein.

Aufgrund der im "C++ Kernel" - Tutorial beschrieben Probleme habe ich diese "__main" und "__atexit" funktion übernommen (und auch aufgerufen) und meinen Link-script dementsprechend erweitert.

Zum Problem:
Ich Initialisiere das Objekt, und benutze. Sobalt ich aber eine Funktion verlasse, sind alle Informationen verloren, sodas ich bei jedem Funktionsaufruf / Funktion das Onjekt neu initialisieren muss. (maw.: es ist mehr oder Weniger Lokal)

Habe ich irgendwas falsch gemacht / nicht beachtet??

Schema:
Klasse objekt;

void funktion1()
{
 objekt.init("Test",0,0,0x0C);
 objekt.print("test");
 return;
}

void funktion2()
{
  /*test2 wird nur ausgegeben, wenn ich objekt neu initialisieren (sonst test "test2" an der Adresse 0x00000000*/
 objekt.print("Test2");
 return;
}






26
OS-Design / "Kleine" Frage zu API
« am: 20. December 2006, 18:01 »
Wie geht das mit der API genau??
Also ich möchte keine Interrupts benutzen, sonder Calltables (oder wie das heißt)

bsp.:
fnc_kbd_getlastkey_cv_a#AFFE707

fnc_kbd_getlastkey = Funktionsname
_cv = Rückgabewert / parameter
_a = Version (falls es irgendwann mal eine ähnliche mit gleichen namen geben sollte
# = signalisiert das ende des namens, und beging der Adresse
AFFE707 = Adresse der Funktion (natürlcih nicht ASCII-Codiert)

Kann man das so machen??
Wenn ja, wie sage ich meinem Kompiler, das er mir so eine Liste erstellt??
Oder soll ich es zur laufzeit machen??
27
Lowlevel-Coding / Möglichkeiten des Textmodes??
« am: 16. December 2006, 23:07 »
Hi
mein OS (PM) läuft im 80×50 Textmode.
Welche möglichkeiten habe ich, die Ausgaben "individueller" zu gestalten??

- Kann ich die Zeichen austauschen (im RM oder PM)?? (wenn ja, wie??)
 (andere schriftart)

- Kann ich den 8Bit Farbcode ändern (im RM oder PM)?? (wenn ja, wie??)
bsp.:
 Rot (0xC) ist nicht 0x0000FF sondern 0x0000AA

- Kann ich mehrere Schriftarten verwenden (wenn ja, wie kann ich zwischen denne im PM wechseln)

- Irgend welche anderen möglichkeiten??
28
Offtopic / Problem mit OOP
« am: 07. December 2006, 11:55 »
Ich möchte meine Konsole gerne OO Programmieren, damit ich mehrere "Aktive" stellen habe, an denen ich etwas schreiben kann, und mithilfe eines backbuffers auch verschiedene Stellen überlagern kann.

Allerdings gibts schon beim erstellen einer einfachen Klasse ein Problem:

Das kommt beim Konpilieren: (
warning: cannot find entry symbol start; defaulting to 000010d0Der entsprechende aufruf des Kompilers:
gpp -Os -nostdlib -fno-builtin -fno-rtti -fno-exceptions -o x:\reos\_ckernel\gui\flowbox.obj x:\reos\_ckernel\gui\flowbox.cpp
Was ist falsch, wie mache ich es richtig??
ps.: Wie kann ich die Zeichenbegrenzung eines Befehls unter winXP umgehen??
29
Offtopic / VMware nutzen, aber keine vmx-Datei!?
« am: 12. November 2006, 11:16 »
Hi
Ich habe jetzt VMware auf meinem PC installiert. Wenn ich es starten möchte, muss ich eine "Virtual Machine Configuration File" auswählen. Es existiert allerdings keine solche Datei....
Wo bekomme ich sowas her??
30
Lowlevel-Coding / "Applikation" ausführen?
« am: 21. October 2006, 13:27 »
Was ich möchte:
Eine *.bin-datei, die an einer belibigen adresse liegt (abhängig von link-script) soll ausgeführt werden. Dieser code soll/muss kernel-rechte haben.

Wie ich es in etwa machen möchte:
Ich habe im kernel eine Funktion "int exec(DWORD address);" an der ich die Addresse der *.bin übergebe. Unter dieser addresse ist der header, mit einprungadresse usw...
Jetzt möchte ich einem Funktionsprototyp "int (*funktion)(void)" diese adresse geben, und ausführen (int error = funktion();)

Wichtiges zum OS
- Singel-Tasking
- Anwendungen sollen kernel-rechte haben

Frage:
Wie realisiere ich das??
was muss ich beachten??
Mit welchen Problemem muss ich rechnen??

ps.: mein ansatz:
Aufruf:
int (*reosapp)(void);

int execute(DWORD address)
{
 reosapp = (int (*)())address;
 int retvalue = reosapp();
 return retvalue;
}

Die Applikation:
[Bits 32]
jmp start

;;HEADERDATEN
 headersize   db 14         ; 1 Byte
 minosversion db 00,00,03   ; 3 Byte (REOS 00.00.03)
 progversion  db 00,01,00   ; 3 Byte (major,minor,patch)
 progname     db "Test.app" ; 8 Byte
;;

start:

  ;;;DEBUG;;;
  mov edi, 0xB8000
  mov [edi], byte 0x0C
  inc edi
  mov [edi], byte '#'
 
  ret
31
Lowlevel-Coding / Problem beim Linken
« am: 03. September 2006, 07:59 »
** Bitte löschen **
32
Lowlevel-Coding / Problem beim laden einer FD im RM
« am: 05. August 2006, 11:53 »
Hi
mit diesem code möchte ich den inhalt der gesamten Diskette (1.44MB) in den RAM laden (nach 0x100000)
In bochs läuft das auch wunderbar, allerding nicht auf einem echten PC.

Befor ein Sektor geladen wird, wird der LBA und CHS-Wert auf den Bildschirm ausgegeben. Daheir weiß ich, das es an folgender stelle probleme bei int 0x13 gibt:

LBA: 0x7E
C: 0x03
H: 0x01
S: 0x01

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; loaddisk
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ah -> RamDisk (1..8)
; al -> FloppyDisk
loaddisk:
  jmp ld.start

  var_movedesc:
  db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; used by BIOS
  db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; used by BIOS
;  db 0x02,0x00                               ; source segment length
;                                             ; (2*cx-1 or greater)
    db 0xFF,0xFF         ; MeOS
  db 0x00,0xA0,0x00    ; 00A000 24-bit linear source address                 ; E 130506
  db 0x93,             ; source segment access rights (93h)
  db 0x00,0x00         ;
;  db 0x02,0x00         ; destination segment length
;                       ; (2*cx-1 or greater)
    db 0xFF,0xFF         ; MeOS
  db 0x00,0x00,0x10    ; 100000 24-bit linear destination address
                       ; Von hier muss die RD später in ihre Richtige
                       ; Position kopiert werden (im C-Kernel)
  db 0x93              ; destination segment access rights (93h)
  db 0x00,0x00         ;
  db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; used by BIOS
  db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; used by BIOS

  db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; MeOS
  db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ; MeOS


  var_rd       db 0x00
  var_fd       db 0x00
  var_addrbx   dw 0xA000 ; Hier soll int 0x13 hinschreiben
  var_addres   dw 0x0000 ; (0x1:A000) (es:bx
  var_diskaddr dw 0x0000 ; Lineare Sectoraddresse (0x0000 .. 0x0B40)

  ld.start:
    ; Laufwerke sichern
    mov [var_rd+os], ah
    mov [var_fd+os], al

    ; FD Reseten (int 0x13>0)
  ld.reset:
    push ds             ; DS sichern
    xor  ax, ax
    mov  dl, [var_fd+os]; Floppydrive resetten
    int  0x13
    pop  ds
    or   ah, ah
    jnz  ld.reset       ; Bei fehler, widerholen

  ld.loadfd:
    mov  ax, [var_diskaddr+os] ; Lineare Sektoradresse
;cl=Sector
;dh=Head
;ch=Cylinder    
    call Lsn2Chs
call writeuserinfos    ; ES WIRD NIX GEÄNDERT, nur die Werte ausgegeben
    mov  dl, [var_fd+os]       ;Laufwerk
    ; Adresse im RAM
    mov  ax, [var_addres+os]
    mov  es, ax
    mov  bx, [var_addrbx+os]
    ; Sonstige einstellungen
    mov  ah, 0x02           ; Funktion 2 (lesen)
    mov  al, 0x01           ; nur einen Sektor lesen
    int  0x13
    or   ah, ah
    ;jnz   ld.loadfd          ; Fehler? Wiederholen
    jnz  ld.error           ; Fehlermeldung ausgeben
;;;; HIER WIRD ABGEBROCHEN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ;;;;
 
  ; Daten verschieben ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ld.move:
    mov  cx, 0x0100         ; [WORD] => 0x200 Byte => 1 Sektor
    mov  si, var_movedesc+os ; Offsetadresse
     mov  ax, 0x1000        ; Segmentadresse
     mov  es, ax
    xor  al, al
    mov  ah, 0x87           ; Copy Extended memory
    int  0x15               ; move
    or   ah, ah             ; ah == 0?
    jnz  ld.error
   
  ; Neue Werte für ld.loadfd und ld.move errechen ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ld.calc:
    mov  ax, [var_diskaddr+os]
    cmp  ax, 0x0B40-1
    jz   ld.ende            ; Ende erreicht??
    inc  ax
    mov  [var_diskaddr+os], ax
    ; desc bearbeiten (zieladresse) ;(+26)
    mov  al, [var_movedesc+os+27] ;Lower  part
    mov  ah, [var_movedesc+os+28] ;Higher part
    add  ax, 0x02                 ; Einen Sektor drauf-addieren
    mov  [var_movedesc+os+28], ah ;Higher part
    mov  [var_movedesc+os+27], al ;Lower  part

    jmp  ld.loadfd
   

  ; Fehler
  ld.error:
    mov  si, str_error+os
    call writestring
    call getkey
    jmp ld.ende

  ld.ende:
    mov  dx, 0x03F2         ; fd Adresse
    mov  al, 0
    out  dx, al             ; fd-motor aus

    retn


Wo ist der Fehler??
bzw wo muss ich ihn suchen??

ps.: Es wird immer 1(!) Sector geladen, und dieser dann in den höheren Speicherbereich kopiert.
33
Offtopic / Tool zum bearbeiten vom img-dateien
« am: 20. May 2006, 22:00 »
Hi
Kennt jemand ein gutes tool mit dem ich z.B. Dateien an eine *.img datei anhängen / einfügen kann??
z.B. ich habe eine 50 Sektoren große Datei, , möchte diese aber auf 200 Sektoren vergrößern, und in Sektor 100 & 101 eine Datei einfügen.

Gibts da was fertiges, oder muss man sich sowas selber schreiben :)
34
Hi
Wenn ich per Interrupt daten von einer Diskette lade, muss ich die Zieladresse in es:bx angeben.

Ich möchte jetzt eine Ganze Diskette in den Arbeitsspeicher laden (0x168000 Byte)
Wie mache ich das jetzt mit dem Errechnen der Neuen adresse in "bx" und "es"??

denn 0xFFFF (Offsetadresse) / 512 = 127,998 also kann ich 127 Sektoren laden, befor ich "es" erhöhen muss, allerdings bleiben dann 511 Byte pro Segment  über...


ps.: Wenn ich mich einlogge bekomme ich immer ein 404.
35
Lowlevel-Coding / Floppy Treiber: Was denn nun??
« am: 10. April 2006, 13:32 »
Hi
Ich hab zZ das Problem einen Floppytreiber zu schreiben.
Dazu habe ich einige Fragen/Probleme.

1. DMA
Mein OS ist/soll NICHT Multitasking-fähig sein, darum möchte ich auf den DMA Controller verzichten.
Ich habe in einigen Beriträgen in diesem Forum gelesen, dass das nicht möglich sei, aber auch, das win98 auf den DMA verzichtet.
Geht das jetzt ohne, oder nicht?? Wenn ja, wie mache ich das?

2. Paging
Wenn man mit dem DMA Controller arbeitet, muss man die Page angeben. Was mach ich, wenn ich kein Paging verwende??

3. IRQ
Im DOR (bit 3) kann ich "DMA and IRQ channel" aktivieren/deaktivieren. Wenn ich jetzt DMA deaktiviere, wird doch auch automatisch IRQ6 deaktiviert, kann man das verhindern??

4. Bochs & PC
Ich kann den Motor des Laufwerks bereits unter Bochs steuern, aber nicht auf meinem echten PC. Ich habe gelesen, dass das "normal" sei. Aber woher weiß ich was falsch ist?? ich kann doch nicht jedes mal meinen PC neu satrten.
36
Lowlevel-Coding / Kernel wird nicht mehr geladen...
« am: 29. March 2006, 16:25 »
Hi
Ich habe für mein OS eine kleine Konsole geschrieben, um den code zu testen, den ich schreibe (z.B. Treiber)

Jedenfalls lade ich jetzt beim booten nicht 32Sektoren, sondern 40.
ABER, seit dieser kleinen änderung im bootloader gibts ein Problem.

Unter Bochs läuft alles so, wie es soll, aber jetzt wollte ich es auf einem Echten PC testen, und das geht nicht.:
Das Disketttenlaufwerk (bzw der Motor) ist aktiv, da das lämpchen läuchtet, aber sonst tut sich NICHTS!!
woran liegt das?? an den 40 Sektoren, am BIOS, ...??

hier mal der Codeausschnitt:
loadkernel:
   ; Diskdrive reset (Interrupt 0x13,0)
   push ds      ; Sichere DS
   mov ax, 0      ; Funktion 0 (reset)
   mov dl, [bootdrv] ; Dieses Laufwerk ist gewünscht (bootlaufwerk)
   int 0x13      ; Interrupt ausführen
   pop ds      ; DS wiederherstellen
   jc loadkernel    ; Geht nicht? -> Noch mal!

  load1:
   mov ax, 0x1000    ; ES:BX = 1000:0
   mov es, ax
   mov bx, 0

   ; Sektoren lesen (Interrupt 0x13, 2)
   mov ah, 2      ; Funktion 2 (Lesen)
   mov al, 40      ; Lese 40 Sektoren (0x0000 -> 0xxxx) !!ICH HABE NUR DIE ZAHL GEÄNDERT
   mov cx, 2      ; Cylinder=0, Sector=2
   mov dx, 0      ; Head=0, Lauferk=0
   int 0x13      ; ES:BX = Daten vom Laufwerk
   jc load1      ; Fehler? -> Noch mal!

   retn


Ich hoffe ihr könnt mir helfen...
37
OS-Design / Von Text zur Grafik, aber wann??
« am: 19. February 2006, 15:15 »
Hi
Wann muss/kann ich anfangen, einen (oder mehrere) Pixel auszugeben??

Ich möchte ähnlich wie unter win98, während des Bootens, den 80×25-Textmodus beibehalten, um da einige textausgaben zu machen. Wenn ich dann "fertig" mit booten bin (Treiber und so geladen habe) möchte ich in einen 800×600 oder 1024×768 Grafikmodus wechseln (VESA2). Das problem: Ich habe hier im Forum öfters gelsesen, das man das "nur" im RealMode machen kann, und NACH dem Setzten des VModuses erst in den PM wechseln soll.

wie ist das bei win98 gelöst?? wie kann ich im PM nach dem laden des Tastaturtreibers, usw. in den Grafikmodus wechseln??
38
Lowlevel-Coding / Problem mit CS bei JMP
« am: 28. January 2006, 21:28 »

; . . .

REOSCONSOLE:

  mov  si, msg_prompt
  call fnc_writestring

  mov  ah, [opt_cmdcolor]         ; Farbe für den command
  mov  al, [opt_paramcolor]       ;   "    "  die Parameter
  call fnc_getcommand


  mov  si, cmd_test
  call fnc_cmpcmd    ; 0 wenn gleich
  jz fnc_cmd_test  ;;HIER GIBTS DAS PROBLEM


jmp REOSCONSOLE

;;;;;;;;;,,,,,,,,,;;;;;;;;;;;;

   ENDLESS:
   jmp ENDLESS

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; FUNKTIONEN                              ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

fnc_cmpcmd:
   mov  di, cin_command
   call fnc_strcmp
   or   al, al
   ret

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

fnc_cmd_test:

   ret

; . . .


Hi wenn ich zur funktion "fnc_cmd_test" springen möchte, gibts bochs folgende Meldung aus:
[CPU0 ] prefetch: RIP > CS.limit

woran liegt das??
wie bringe ich das zum laufen??
39
Lowlevel-Coding / Problem mit inlineassambler und lidt
« am: 29. December 2005, 09:48 »
Mein code:
INTERRUPT idt[256];
DWORD     ptr_idtr[3];

bool LoadIDT()
{
 ptr_idtr[0] = (sizeof(INTERRUPT)*256) << 16;
 ptr_idtr[1] = (DWORD)idt;
 
 __asm__ __volatile__ ("LIDT (%0) ": :"p" (&ptr_idtr[3]) );

 return true;
}


Bei dem asm-teil gibts ein Linkererror:
\idt.obj(.text+0x4e):idt.cpp: undefined reference to '$_ptr_idtr'
\idt.obj(.text+0x260):idt.cpp: undefined reference to '$_ptr_idtr'


Wenn ich den asm-teil rauskommentiere gibt's keine Probleme...

Wo ist mein Fehler??
40
Lowlevel-Coding / Fehler bei PIC oder IRQ, aber wo/was genau??
« am: 25. December 2005, 11:17 »
Erstmal generelles ablauf
1. In den PMODE wechseln
2. Zum CKernel Springen
3. Interrupts ausschalten (wurde vorher auch schonmal gemacht, aber zur sicherheit nochmal, da zwischen dem 1. Ausschalten (PMODE) und dem Kernel noch ne menge Passiert/Passieren soll)
4. PIC
5. IRQa ausschalten (0xFF)
6. IDT "bauen"
7. Interrupts einschalten
8. IRQs aktivieren (0x00)

Fehler
Bist einschlißlich Punkt 7 Läuft alles wie es soll (zumindest passiert nichts ungewöhnliches)
Nach Punkt 8 Startet bochs neu.

Ausgabe der Konsole bei bochs
***e[CPU0 ] exception(): 3rd (13) exception with no resolution, shutdown status is 00h, resetting
***i[SYS  ] bx_pc_system_c::Reset(SOFTWARE) called
***i[APIC0] local apic in CPU apicid=00 initializing
***i[BIOS ]  rombios.c,v 1.138.2.1 2005/07/06 19:30:36 vruppert Exp $
***i[KBD  ] reset-disable command received
VGABios &Id: vgabios.c,v 1.62 2005/07/02 18:39:43 vruppert Exp $
***i[CLVGA] VBE known Display Interface b0c0
***i[CLVGA] VBE known Display Interface b0c3
***i[VBIOS] VBE Bios $Id: vbe.c,v 1.47 2005/05/24 16:50:50 vruppert Exp $


Frage
Wo muss ich nach dem Fehler suchen, was läuft falsch??
Könnte der Fehler beim laden der IDT auftreten??
Seiten: 1 [2] 3

Einloggen