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

Seiten: 1 ... 3 4 [5]
81
Lowlevel-Coding / Disketten PORT im PM
« am: 12. July 2006, 00:37 »
Hallo,

ich bin nun mit meinem Kernel im PM angelangt. Hab nun keine BIOS-Funktionen bzw. Ints zur Verfügung. Wie kann ich im PM auf die Diskette zugreifen? Welchen PORT muss ich ansprechen?

Gruß Cheebi
82
Lowlevel-Coding / Sound-Ausgabe
« am: 07. July 2006, 18:12 »
Hi Leuts,

ich möcht beim Starten von meinem OS einen kurzen Sound ausgeben lassen. Nicht über den PC-Lautsprecher, sondern über Bochsen an ner Audio-Karte. Gibts da Standards, wie VESA (zB VBE1.3) bei Grafikkarten, oder muss man da für jede einzelne Audio-Karte nen eigenen Treiber schreiben? Also Treiber schreiben is klar, aber kann man Standards benutzen? zB einen bestimmten PORT ansprechen um die Karte anzusteuern. Ich bin im PM, das heißt nix BIOS oder so^^

Wäre nett, wenn mir jmd. helfen könnt...

Cheebi
83
Lowlevel-Coding / Danke...
« am: 18. May 2006, 23:20 »
@Bitmaster: danke, hba bei Ralf's interruptlist vorbeigeschaut... mitm int 15h lässt sich das toll regeln...

@ all the others...
was habt ihr mit eurem bescheuerten CD Laufwerk???

gruß Cheebi
84
Lowlevel-Coding / PC ausschalten
« am: 17. May 2006, 23:01 »
Hallo,

wie kann ich denn dem PC die Stromversorgung per Software (der Kernel) abdrehen :lol: ? Also nicht einfach nur ein Reboot am Ende und auch keine blöde Aufforderung, den PC nun per Hand auszuschalten zu können, sondern ein Klick - und Strom weg. Gibt es dazu einen BIOS-Interrupt oder etwas ähnliches?

Cheebi
85
Lowlevel-Coding / ConTEXT!!!
« am: 22. February 2006, 13:54 »
ich hab fast alle von den Editoren ausprobiert, die ihr benutzt. Der einzige, den ich so richtig toll fand ist ConTEXT:
- sehr einfache Handhabung
- keinen integrierten Assembler (externes Assemblieren ist mir lieber)
- unterstützt die Hervorhebung verschiedener Sprachen
- lädt sehr schnell (nicht wie MS-Office^^)

Danke für die vielen Antworten....

 Cheebi
86
Lowlevel-Coding / Assembler
« am: 17. February 2006, 19:06 »
Hallo,

schreibt ihr eure Assembler im Editor von Windows, oder habt ihr einen guten Editor für Assembler, der das Einrücken etc. vereinfacht???
Wenn ja, welchen?

Cheebi
87
Hi,

kann mir nicht einfach bitte mal jemand den einen funktionierenden Code schicken, inclusive der Linker-Datei für ld, oder zu mindest der Befehlszeile?
Wär echt total nett, wenn ich wenigstens einen Tip bekäme, woran das Haupt-Problem liegt, denn in den Protected-Mode muss ich doch schalten, das kann ich von Tee Jay doch übernehmenm, oder? Und dann kann es doch nicht allzu aufwändig sein, den C-Kernel zu starten. Der liegt an einer bestimmten Adresse, nur wie komm ich dahin?

MfG
Cheebi
88
Ja und wie komm ich nun dahin, wo ich hin will? Und zwar, dass der C-Kernel mir den String auf den Bildschirm packt??? Du hast es doch auch schon geschafft...!?

Cheebi
89
Hi leutz,

ich hab ein Problem:
ich hab den Bootloader von Tee Jay benutzt, der der kernel.bin von der Diskette starten soll. Der Bootloader funktioniert. Aber alles weitere nicht mehr: Er zeigt keinen String an...
Liegt das eventuell am linken der Dateien?
Hier mal die linker Datei:

OUTPUT_FORMAT("binary")
INPUT(kernel32.obj ckernel.obj)
ENTRY(start)
SECTIONS
{
  .text  0x10200 : {
    code = .; _code = .; __code = .;
    *(.text)
    . = ALIGN(1);
  }
  .data  : {
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(1);
  }
  .bss  :
  {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(1);
  }
  end = .; _end = .; __end = .;
}



Ich versteh nicht, warum hier 0x10200 angegeben wird?
Im Bootloader von Tee Jay wird der Kernel an eine andere Adresse geladen:

ExecuteKernel:
mov ax, 0x1000
push ax ;Segmentadresse an welcher der Kernel ist auf den Stack pushen
mov ax, 0
push ax ;Offsetadresse des Kernels (0) auf den Stack pushen
retf ;Einen FAR-Rücksprung zum Kernel machen


Ich hab hier noch alle restlichen Dateien genauso von tee Jay übernommen, aber es funktioniert nicht:

1. Kernel, er schaltet in den Protected-Mode:

[BITS 16] ;16 Bit Code erstellen
jmp start ;GDT überspringen

NULL_Desc:
dd 0
dd 0

CODE_Desc:
dw 0xFFFF ;Segmentgröße Byte 0/1
dw 0 ;Segmentbasisadresse Byte 0/1
db 0 ;Segmentbasisadresse Byte 2
db 10011010b ;Zugriffsberechtigungen
db 11001111b ;Zusatz + Segmentgröße Bits 16 - 19
db 0 ;Segmentbasisadresse Byte 3


DATA_Desc:
dw 0xFFFF
dw 0
db 0
db 0x92
db 0xCF
db 0

gdt:
Limit dw 0 ;Größe der GDT (wird später eingetragen)
Base dd 0 ;Adresse der GDT (wird später eingetragen)


start:

cli ;Interrupts ausschalten

mov eax, cs ;EAX auf derzeitiges Codesegment setzen
mov ds, ax ;DS auf Codesegment setzen

shl eax, 4 ;EAX mit 16 multiplizieren (Lineare Adresse
;des Codesegments errechnen)
mov [CODE_Desc+2], ax ;Lineare Adresse des Codesegmentes als
mov [DATA_Desc+2], ax ;Startadresse des Code- und Datendeskriptors
shr eax, 16 ;eintragen
mov [CODE_Desc+4], al
mov [DATA_Desc+4], al

mov eax, cs ;Startadresse der GDT errechnen
shl eax, 4
add eax, NULL_Desc

mov [Base], eax ;Startadresse der GDT eintragen
mov [Limit], WORD gdt - NULL_Desc -1 ;Größe der GDT errechnen und eintragen

lgdt [gdt] ;GDT laden

mov eax, cr0 ;In den Protected Mode schalten,
or eax, 1 ;indem Bit 0 des CR0 Registers auf 1
mov cr0, eax ;gesetzt wird

db 0xea ;FAR-JUMP zum Codesegment
dw PMODE
dw 0x8


[BITS 32] ;32 Bit Code erstellen

PMODE:
mov WORD [CODE_Desc+2], 0 ;Code Segmentstartaddresse auf 0 setzen
mov WORD [DATA_Desc+2], 0 ;Daten Segmentstartadresse auf 0 setzen
mov BYTE [CODE_Desc+4], 0 ;Code Segmentstartaddresse auf 0 setzen
mov BYTE [DATA_Desc+4], 0 ;Daten Segmentstartadresse auf 0 setzen

mov eax, 2 ;Selektor für das Datensegment erstellen
shl eax, 3

mov ds, ax ;Daten- Stack- und Extrasegment mit
mov ss, ax ;Datensegmentdeskriptor laden
mov es, ax
mov eax, 0 ;FS und GS mit Null-Deskriptor laden
mov fs, ax
mov gs, ax
mov esp, 0x1FFFFF ;Stack auf unterhalb der 2 MB Grenze setzen

jmp 0x8:0x10000 + PMODE2 ;Sprung in das "neue" Codesegment

PMODE2:
jmp END ;Zum Ende Springen

times 512-($-$$) db 0; ;Da der Linker sich nicht mit ungeraden
;Dateigrößen verträgt, wird diese Datei auf 512
;gepaddet.

END:


2. Kernel, springt zum C-Kernel:

[Bits 32]
extern _main
global start
global _EnableA20Gate

start:

call _main

STOP:
jmp STOP


3. Kernel, C-Kernel:

int main()
{
char *Text = "Welcome to Protected Mode";  
char *VideoMem = (char*)0xB8000;  
 
while(*Text)  
{  
*VideoMem = *Text;  
*VideoMem++;  
*VideoMem = 7;  
*VideoMem++;  
*Text++;  
}  

return(0);
}


Warum zeigt er mir den String nicht an?

MfG,
 Cheebi
90
Das Wiki / Hilfe!!! Bootloader ...
« am: 21. December 2005, 23:47 »
Hallo,

wir suchen den Bootloader, von dem Tee Jay gleich am Anfang von seinem Tutorial "C-Kernel starten" redet (http://www.jay-code.de/scripts/htmlgenerator.php?page=fat12&directory=tutorials).
Wer weiß'n dazu was???
Please help me ...

 Cheebi
Seiten: 1 ... 3 4 [5]

Einloggen