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

Seiten: 1 2 [3]
41
Lowlevel-Coding / ComOS 0.1 Beta
« am: 27. July 2004, 15:54 »
PS: Mein Bootloader hab ich leider geklaut *schandeübermich*,
hab aber keinen anderen gefunden, der mit turbo c kerneln läuft:

[BITS 16]
[ORG 0x7C00]

START:        JMP SHORT BEGIN
        NOP             ; not really needed, old school style
;  +-------------------------------------------------------------+
;  | Data section of boot.asm bootstrap file                     |
;  +-------------------------------------------------------------+
bsOEM        DB 'comosv01'        ; OEM String
bsSectSize  DW 512            ; Bytes per sector
bsClustSize DB 1            ; Sectors per cluster
bsRessect   DW 1            ; # of reserved sectors
bsFatCnt    DB 2            ; # of fat copies
bsRootSize  DW 224            ; size of root directory
bsTotalSect DW 2880            ; total # of sectors if < 32 meg
bsMedia     DB 0xF0            ; Media Descriptor
bsFatSize   DW 9            ; Size of each FAT
bsTrackSect DW 18            ; Sectors per track
bsHeadCnt   DW 2            ; number of read-write heads
bsHidenSect DD 0            ; number of hidden sectors
bsHugeSect  DD 0            ; if bsTotalSect is 0 this value is
                    ; the number of sectors
bsBootDrv   DB 0            ; holds drive that the bs came from
bsReserv    DB 0            ; not used for anything
bsBootSign  DB 29h            ; boot signature 29h
bsVolID     DD 0            ; Disk volume ID also used for temp
                    ; sector # / # sectors to load
bsVoLabel   DB 'comos v 0.01'        ; Volume Label
bsFSType    DB 'FAT12   '        ; File System type

;  +-------------------------------------------------------------+
;  | Code section of boot.asm bootstrap file                     |
;  +-------------------------------------------------------------+
BEGIN:        CLI             ; disable interrupts
        MOV [bsBootDrv],DL        ; save drive number
        MOV AX,0x9000        ; put stack at 0x98000
        MOV SS,AX
        MOV SP,0x8000

        MOV CX,[bsTrackSect]    ; update int 1E FDC param table
        MOV BX,0x0078
        LDS SI,[DS:BX]
        MOV BYTE [SI+4], CL
        MOV BYTE [SI+9], 0x0F
        MOV AX,CS
        MOV DS,AX            ; I know its not needed, but some
                    ; BIOS fail if DS not set the hard
                    ; way, my Cannon 450 does anyways =(
        STI             ; enable interrupts again
        PUSH DS
        MOV DL,[bsBootDrv]        ; DL = drive we booted from
        XOR AX,AX
        INT 0x13            ; reset disk drive controller
        POP DS
        JC bootfail2        ; error resetting controller?
        JMP _l1
bootfail2:  JMP bootfail
_l1:
        MOV AX,0x0000
        MOV ES,AX            ; correct segment registers
        MOV DS,AX

        MOV SI,bootmsg        ; display load message
        CALL putstr

        ; find the root directory on volume
        XOR AX,AX
        MOV AL,[bsFatCnt]        ; number of FAT mirrors on disk
        MOV BX,[bsFatSize]        ; how many sectors a FAT uses
        MUL BX            ; AX returns FatCnt*FatSize
        ADD AX,WORD [bsHidenSect]    ; AX=AX+HiddenSectors
        ADC AX,WORD [bsHidenSect+2] ; HidenSect is a double word, so...
        ADD AX,WORD [bsRessect]    ; AX now holds the sector where the
                    ; VTOC (Volume Table Of Contents)
                    ; starts
        MOV WORD [BootSig],AX    ; BootSig is used as temp to hold AX

        CALL checkroot        ; look into VTOC in root directory
                    ; and see if we find our kernel image

        XOR AX,AX
        ADD AX,WORD [START]     ; [START] = number of sectors in root
        ADD AX,WORD [bsVolID]    ; sector number where kernel image
                    ; starts, but not correct value yet..
        ADD AX,WORD [BootSig]    ;
        SUB AX,2            ; correction for a mis-calc
        MOV CX,WORD [bsVolID+2]    ; number of sectors

        MOV BX,0x8000
        MOV ES,BX            ; get ready to read sectors into mem


nextsector: PUSH AX            ; save registers
        PUSH CX
        PUSH DX
        PUSH ES

        XOR BX,BX            ; set zero offset
        CALL readsect        ; read a sector

        POP ES            ; restore registers
        POP DX
        POP CX
        POP AX
        MOV BX,ES
        ADD BX,0x20         ; increment address 512 bytes
        MOV ES,BX
        INC AX            ; read next sector
        LOOPNZ nextsector
        MOV DX,0x3F2
        XOR AL,AL
        OUT DX,AL            ; turn off floppy disk motor
        MOV SI,bootgood
        CALL putstr
        MOV DL,[bsBootDrv]        ; don't forget our bootdrive
        MOV AX,0x8000        ; set segment registers and jump
        MOV ES,AX
        MOV DS,AX
        PUSH AX
        XOR AX,AX
        PUSH AX
        RETF

checkroot:
        PUSH AX            ; save registers
        PUSH BX
        PUSH CX
        PUSH DX
        PUSH SI
        PUSH DI

        MOV AX,0x8000        ; put root directory at 0x80000
        MOV ES,AX
        MOV AX,32            ; AX = ((32*RootSize)/512) + 2
        MUL WORD [bsRootSize]
        DIV WORD [bsSectSize]
        MOV CX,AX            ; cx holds # of sectors in root
        MOV WORD [START],AX
        MOV AX,WORD [BootSig]    ; get prev. saved loc. for root dir

r1:        XOR BX,BX
        PUSH CX            ; save count
        PUSH AX            ; save sector number
        PUSH ES
        PUSH DX
        CALL readsect
        XOR BX,BX
l_1:        MOV DI,BX            ; set address to check from
        MOV CX,11            ; check 11 bytes
        MOV SI,FileName        ; address of string to check with
        REPZ CMPSB
        JE foundit            ; we found our FileName in the VTOC
        ADD BX,32            ; check next entry
        CMP BX,[bsSectSize]     ; end of sector?
        JE l_2
        JMP l_1
l_2:        POP DX            ; restore registers
        POP ES
        POP AX
        POP CX
        INC AX            ; read next sector
        LOOPNZ r1
        JMP bootfail
foundit:    POP DX            ; get these off the stack
        POP ES
        POP AX
        POP CX

        MOV DI,0x1A         ; get clustor #
        ADD DI,BX
        PUSH BX            ; save bx for finding # of sectors
        MOV AX,[ES:DI]
        XOR BX,BX            ; calculate sector #
        MOV BL,[bsClustSize]
        MUL BX            ; ax holds sector #
        MOV WORD [bsVolID],AX

        POP BX            ; get location of directory entry
        MOV DI,0x1C
        ADD DI,BX
        MOV AX,[ES:DI]        ; put number of bytes in ax
        XOR DX,DX
        MOV BX,[bsClustSize]    ; # of bytes / 512
        DIV BX
        INC AX
        MOV WORD [bsVolID+2],AX    ; save number of sectors to load

        POP DI            ; restore registers
        POP SI
        POP DX
        POP CX
        POP BX
        POP AX

        RET             ; return to caller

;  +-------------------------------------------------------------+
;  | Routines used over and over in boot.asm below...            |
;  +-------------------------------------------------------------+
putstr:     ; SI = address of string to display
        LODSB
        OR AL,AL
        JZ SHORT putstrd
        MOV AH,0x0E
        MOV BX,0x0007
        INT 0x10            ; print character to CRT
        JMP putstr
putstrd:    RETN            ; return to caller

bootfail:   ; display failure message
        MOV SI,bootbad        ; display error message
        CALL putstr
        XOR AX,AX            ; wait for keypress
        INT 0x16
        JMP 0xFFFF:0000        ; reboot machine

readsect:   ; ES:BX = Location ; AX = Sector
        MOV SI,[bsTrackSect]
        DIV SI            ; divide logical sect by track size
        INC DL            ; sector # begins at 1
        MOV [bsReserv],DL        ; sector to read
        XOR DX,DX            ; logical track left in ax
        DIV WORD [bsHeadCnt]    ; leaves head in dl, cyl in ax
        MOV DH, [bsBootDrv]     ;
        XCHG DL,DH            ; head to dh, drive to dl
        MOV CX,AX            ; cyl to cx
        XCHG CL,CH            ; low 8 bits of cyl to ch, hi 2 bits
        SHL CL,6            ; shifted to bits 6 and 7
        OR CL, BYTE [bsReserv]    ; or with sector number
        MOV AL,1            ; number of sectors
        MOV AH,2            ; use read function of int 0x13
        PUSH DS
        INT 0x13            ; read sector
        POP DS
        JC bootfail         ; display error message
        RET             ; return to caller

;  +-------------------------------------------------------------+
;  | Some more data used within boot.asm bootstrap file          |
;  +-------------------------------------------------------------+
bootmsg     DB 'Starting ComOS ver 1 . . .',13,10,13,10,'BOOT STATUS: ',0
bootgood    DB 'GOOD',13,10,0
bootbad     DB 'BAD',13,10,0
FileName    DB 'KERNEL  BIN'
times 512-($-$$)-2 db 0
BootSig     DB 0x55, 0xAA
Scorpion
42
Lowlevel-Coding / ComOS 0.1 Beta
« am: 27. July 2004, 15:52 »
Kann ich uploaden, war aber keine so große nachfrage!
Aber wenn es dich so brennend interresiert, hier mal der Source des Kernel:

/* ComOS Beta 0.1 - Kernel
   written by Scorpion
*/
#include "kgrph.h"
#include "ksys.h"

void shell();

void main()
{
    ksysinit();
    setmodetext();
    clrscr();
    settextcolor(LIGHTBLUE);
    writeln("===================== \n");
    settextcolor(YELLOW);
    writeln("ComOS 0.1 by Scorpion \n");
    settextcolor(LIGHTBLUE);
    writeln("===================== \n\n");
    shell();
}

void ParseCommand(char command[])
{
    if(strcmp(command,"help") == 1)
    {
        writeln("Hilfe:\n");
        writeln("reboot   -> Neustarten\n");
        writeln("ver      -> Zeigt die Version\n");
        writeln("help     -> Zeigt dieses Fenster\n\n");
    }
    else if(strcmp(command,"reboot") == 1)
    {
        reboot();
    }
    else if(strcmp(command,"ver") == 1)
    {
        writeln("ComOS version 0.1 Beta\n");
        writeln("by Scorpion\n\n");
    }
    else
    {
        writeln("Falscher Befehl!\n");
    }
}

void shell()
{
    settextcolor(LIGHTGREEN);
    char command[13];
    for(;;)
    {
        writeln("A:\>");
        getln(command, 13);
        ParseCommand(command);
    }
}
Die Funktionen und so sind in den zwei headern!

MfG, Scorpion
43
Lowlevel-Coding / ComOS 0.1 Beta
« am: 27. July 2004, 14:39 »
Hi Leute,
endlich ist mein erstes Betriebssystem fertig geworden: ComOS! Ihr könnt ihn euch unter folgender Adresse herunterladen:

http://www.free-webspace.biz/Scorp/comos01beta.zip

Wenn es eine neue Version gibt, poste ich es hier!
Bitte schreibt mal ob es euch gefällt!

Thanks, Scorpion
44
Lowlevel-Coding / Probelm mit Kernel
« am: 27. July 2004, 14:27 »
falls du dich ein bisschen in c++ oder c auskennst, weisst du auch das ein header eine Datei ist, die man wie folgt einbindet:
#include <name.h>
ein os-header ist in dem fall ein HEader mit wichtigen funtkionen für ein operating system!
45
Lowlevel-Coding / Input bei C-Kernel
« am: 27. July 2004, 14:26 »
Danke für die Antwort
Ich hab mir einen bootloader heruntergeladen der die datei kernel.bin auf dem floppy läd (er ist nämlich fat12 kompatibel). geht wunderbar, auch mit einem kernel der in turbo c geschrieben wurde. mein betriebssystem funzt jetzt!

Scorpion
46
Lowlevel-Coding / Input bei C-Kernel
« am: 27. July 2004, 11:58 »
Mach jetzt mit turbo C++ einen kernel. das funktioniert besser. hab schon input hin bekommen, aber ich hab so einen bescheuertn bootloader für fat12. da muss ich dann die kernel.bin auf a: kopieren (!). kann ich davon auch ein image irgendwie machen. bootloader und kernel sind ja nicht zusammen!

Scorpion
47
Lowlevel-Coding / Input bei C-Kernel
« am: 27. July 2004, 10:19 »
Hi Leute,
ich hab jetzt meinen ersten Kernel in C zum laufen gebracht, aber weiß nicht wie ich den Benutzer etwas eingeben lasse. in einem asm-kernel von mir geht das ja mit folgendem Code:

mov ah,0
int 016h
mov var,al
(var für Variable, is ja klar)

wenn ich das bei meinem C-Kernel einbaue schmiert der sofort ab! ich benutze djgpp + die elfbinutils (für elf-format und binary) und nasm. mein bootloader funzt auch!

Hilfe,
Scorpion
48
Offtopic / Programming-Board
« am: 27. July 2004, 10:16 »
Is ja gut,
tut mir leid!

*heilundgesichtinbeivergrabeschluchz*

Scorpion
49
Lowlevel-Coding / Probelm mit Kernel
« am: 27. July 2004, 10:14 »
Da ich hier ja keine Antwort bekomme, habe ich mich selbst in Google gestürzt und auch einen gefunden. Mein OS-Header ist leider wieder offline, da ich verbesserungen dran vorgenommen habe. und folgendes: mein os funzt.


Danke für nichts,
Scorpion
50
Offtopic / Programming-Board
« am: 26. July 2004, 13:17 »
ich bewundere immer die freundlichkeit dieses tollen members!
Du musst ja nicht kommen!
51
Lowlevel-Coding / Probelm mit Kernel
« am: 26. July 2004, 13:16 »
Ich hatte schon meinen EIGENEN kernel geschrieben, nur wollte ich erst mal mit dem hier testen. ach du liebe zeit! Bitte schickt mir mal einen bootloader der im pmode startet, denn ich will c kernel schreiben (hab ich auch schon).

PS: Wer gerne C-Kernel schreibt, der sollte sich von www.scorpion.coolix.com meinen OS-header downloaden!

Scorpion
52
Lowlevel-Coding / Probelm mit Kernel
« am: 26. July 2004, 10:48 »
War ja nur zu Beispielzwecken .....
Schickt mir mal bitte einen bootloader für den pmode
53
Offtopic / Programming-Board
« am: 26. July 2004, 09:19 »
Hi Leute,
ich hab nun mein eigenes Forum über Programmierung!
Meldet euch bitte an:

www.programming-board.coolix.com

Viel Spaß,
Scorpion
54
Lowlevel-Coding / Probelm mit Kernel
« am: 26. July 2004, 08:58 »
Hi Leute,
ich habe einen Kernel in C geschrieben und ihr compiliert und gelinkt. Außer einer kleinen
Warnmeldung des der Linker (ld) keinen Entry-Point gefunden hat, ist nichts an errors oder so gekommen. Ich habe en bootloader aus lowlevel 1 genommen und ihn mit folgendem kommando kopiert:

copy bootloader.bin + kernel.bin image.raw

Das Image habe ich auf Floppy (mit rawrite) gezogen und es getestet! aber es kam nichts!
Es stand da:
Boot from Floppy..OK

Aber dann kam irgendwie nix mehr!
So sieht der Code meines Kernels aus:
int main(void)
{
  char *str = "Hello, world", *ch;
  unsigned short *vidmem = (unsigned short*) 0xb8000;
  unsigned i;
  for (ch = str, i = 0; *ch; ch++, i++)
    vidmem = (unsigned char) *ch | 0x0700;
  for (;;)
    ;
}

Mit folgenden Einstellungen habe ich es compiliert und gelinkt:
gcc -c -ffreestanding -fwritable-strings -nostdinc -O3 -Wall *.c
ld -Ttext 0x100000 --oformat elf32-i386 -O 1 -o kernel kernel.o

Was kann ich machen?
MfG, Scorpion
55
Lowlevel-Coding / Fehler bei GCC-Compiler
« am: 26. July 2004, 08:29 »
Hi,
geh rechte maustaste auf arbeitsplatz und klick einstellungen. Gehe unter erweitert->umgebungsvariablen und füg eine neue namens DJGPP hinzu, die folgenden wert enthält:
C:\DJGPP\djgpp.env
(Pfad nach dem von dir ändern)

Have fun, scorpion
56
Lowlevel-Coding / Os-dev in C
« am: 25. July 2004, 14:46 »
Hi,
in der Lowlevel Ausgabe 5 stehen ja die Befehle um mit GNU C++ (ich hab DJGPP [is das das gleiche ?]) einen kernel in C zu kompilieren. Bei mir gibts die errormessage (bei dem ld-Befehl), das irgendetwas mit dem format (--oformat elf...) nicht stimmt! was kann ich machen?

Scorpion
57
Das Wiki / Super!
« am: 25. July 2004, 14:42 »
Hi Mastermesh,
ich finde euer Projekt super!
Ich selber habe schon etwas früher OS geschrieben!

Have fun, scorpion
Seiten: 1 2 [3]

Einloggen