201
Lowlevel-Coding / Kernel wird nicht mehr geladen...
« am: 29. March 2006, 18:26 »
Vielen Dank;
werd es mal ausprobieren.
werd es mal ausprobieren.
30. April 2024, 09:51
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.
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
PorkChicken:
ich will damit sagen: wer braucht bitteschoen textausgabe?
Na ja, du springst mit einem Jump zur Funktion und willst mit ret zurückspringen. [...]
00356892916i[CPU0 ] | EIP=00010000 (0000ffff)
mov ax, 0x1000 ; ES:BX = 1000:0
mov es, ax
mov bx, 0
; . . .
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
; . . .
[CPU0 ] prefetch: RIP > CS.limit
typedef struct
{
WORD limit;
INTERRUPT *base;
} __attribute__ ((packed)) IDTR;
IDTR idtr;
//-----------------------------------------------------------------------------------
bool LoadIDT()
{
// static IDTR idtr;
idtr.limit = (sizeof(INTERRUPT)*256)-1;
idtr.base = idt;
IDTR *pidtr = &idtr;
asm volatile ("LIDT (%0) ": :"p" (pidtr)); //undefined reference to $_idtr
return true;
}
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;
}
\idt.obj(.text+0x4e):idt.cpp: undefined reference to '$_ptr_idtr'
\idt.obj(.text+0x260):idt.cpp: undefined reference to '$_ptr_idtr'
__asm__ __volatile__ ("LIDT (%0) ": :"g" ((char*)idtr+2));
#ifndef HEADERXY
#define HEADERXY
#define xy ab
namespace name
{
void funktion();
}
#endif
#include "headerxy.hpp"
int x; //OK
int *y; //OK
int z[2]; //FEHLER !?
namespace name
{
void funktion()
{
x = 1; //OK
z[0] = x; //LINER-ERROR
*y = 2; //OK
z[1] = 3; //LINER-ERROR
return;
}
}
***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 $
OUTPUT_FORMAT("binary")
INPUT(d:\reos\_ckernel\kernelexe.obj d:\reos\_ckernel\kernelc.obj d:\reos\_ckernel\lowio.obj d:\reos\_ckernel\bootio.obj)
ENTRY(start)
SECTIONS
{
.text 0x11E00 :
{
code = .; _code = .; __code = .;
*(.text)
*(.rodata)
. = ALIGN(1);
}
.data :
{
data = .; _data = .; __data = .;
*(.data)
. = ALIGN(1);
}
.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(1);
}
end = .; _end = .; __end = .;
}
char *VRAM = (char*)0xB8000;
void test3()
{
//char *VRAM = (char*)0xB8000;
VRAM[8] = '3';
VRAM[9] = 0xCE;
return;
}
void test();
void test2();
int main()
{
test2();
test();
return 0;
}
void test()
{
char *VRAM = (char*)0xB8000;
VRAM[2] = '#';
VRAM[3] = 0xCE;
return;
}
void test2()
{
return;
}