Autor Thema: Schwieriges System^^  (Gelesen 12457 mal)

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« am: 25. October 2006, 10:59 »
Also das System, das ich mir für mein OS (ChaOS) ausgedacht habe, sieht so aus:

Das Ziel von ChaOS ist es, ein möglichst gutes Konsolen - OS zu werden, dass im RealMode auf einer Diskette läuft.
Dazu habe ich mir folgendes ausgedacht:


Die Diskette:
Im 0. Sektor befindet sich der Bootloader.
Der 1. bis 100. Sektor wird vom Kernel belegt.
Der 101. bis 1000. Sektor wird vom ChaBASIC belegt.
Ab dem 1001. Server ist der "USER-SPACE".

Der Kernel:
Der Kernel enthält sämtliche Treiber des OS'(, das heißt Tastaturtreiber, Druckertreiber, ...), die ganzen Funktionen, die wichtig sind ( Verarbeitung der Texteingabe, Laden von Sektoren der Diskette, ....), und alles was vom System her wichtig ist.

ChaBASIC:
ChaBASIC soll eine Art Batchsprache werden, die halt Konsolenbefehle enthalten kann.

USER-SPACE:
In den USER-SPACE können Programme geladen werden können.

Jetzt meine Frage: Wie realisiert man dieses Laden von Sektoren in den Arbeitsspeicher und wie schreibt man so eine Batch-Sprache (die Konsolenbefehle funktionieren schon^^)?
« Letzte Änderung: 25. October 2006, 11:01 von Coffee »

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 25. October 2006, 12:14 »
Wo ist da das Problem??
Den int 0x13 zum laden und die Batchsprache kannst du ja ähnlich wie die von Windows oder Linux halten.

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 25. October 2006, 12:37 »
ja ich meine wie erkennte man, wo zb. ein parameter wie --nodeps --force oder so zu ende ist? b bei nem leerzeichen könnte ja noch einer kommen^^ und ein enter wird ja nich mitgesspeichert oder doch

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 25. October 2006, 13:12 »
Doch doch...es gibt spezielle Codes für Enterzeichen.

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 25. October 2006, 15:25 »
ja ich hab die ja drin damit ich überhaupt ein enter in der ja is klar hab ich ja damit überhaupt ein enter in der konsole möglich is...aber wie realisiere ich überhaupt sowas weil ich hab ja kein dateisystem, bzw. will keines haben

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 25. October 2006, 15:32 »
Naja...und wie willst du dann die Batch-Dateien speichern??

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 25. October 2006, 17:15 »
naja in dem userspace. das soll so laufen dass jede datei einem sektor der diskette also 512Byte entspricht

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 25. October 2006, 17:22 »
Jo, dann legst du zuerst noch etwa 2 Sektoren an, welche die Dateinamen behinhalten. z.B. kommt dann alle 6 Bytes ein neuer Eintrag usw.

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #8 am: 25. October 2006, 19:05 »
Ich weiß, dass die Frage nervt, aber wieso nimmst du nicht einfach eines der vorhandenen Dateisysteme? Einfachstes wäre natürlich fat. Aber es gibt ja auch noch andere wie zb ext2.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 25. October 2006, 19:16 »
weil mir die zu schwierig zu proggn sind  :mrgreen: dazu habe ich nicht genung zeit is bei mir schon beim versuch nen bootloader zu coden der n fat12 kenerl lädt gescheitert

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #10 am: 25. October 2006, 20:13 »
@Coffee: Investier lieber mehr Zeit für das OS mit Dateisystem als ohne. Ohne Dateisystem ist das OS schrott bzw. wird es schrott sein. Ein OS ohne Dateisystem ist in meinen Augen kein OS. Denn ein großes Merkmal eines OS ist das Dateisystem. OS ohne Dateisystem gibt es nicht. Also ich empfehle dir FAT12 zu nehmen. Wieso zu schwer einen Bootsektor-Code zu proggen? Dann nimm dir fertige vor und lerne daraus. Wenn du alles verstanden hast, kannst du dir einen eigenen Bootsektor-Code proggen.

bitmaster
In the Future everyone will need OS-64!!!

FreakyPenguin

  • Administrator
  • Beiträge: 301
    • Profil anzeigen
    • toni.famkaufmann.info
Gespeichert
« Antwort #11 am: 25. October 2006, 20:45 »
Ich würde dir auch empfehlen ein FS zu benutzen. Denn ohne, ist das OS ja ziemlich nutzlos. Und allzu schwer ist ein FAT-Treiber auch nicht zu schreiben. Im gegenteil, ich würde sogar sagen, dass es zu den einfacheren Dingen im bereich OS-Dev gehört.

Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 26. October 2006, 09:21 »
moment ich such mal den source vn meinem alten bootloader raus:

org 0x7c00


%define STACK_SEGMENT  0x9000
%define STACK_OFFSET   0xffff
%define FAT_SEGMENT    0x0100
%define FAT_OFFSET     0x0000
%define RD_SEGMENT     0x0220
%define RD_OFFSET      0x0000
%define KERNEL_SEGMENT 0x1000


jmp End_FatSB
OSName db "MSDOS   "
BytesPerSec dw 512
SecPerClus db 1
ResvdSecCnt dw 1
NumFATs db 2
RootEntCnt dw 224
TotSec dw 2880
MediaType db 0xF0
FATSize dw 9
SecPerTrack dw 18
NumHeads dw 2
HiddenSec dd 0
TotSec32 dd 0
DrvNum db 0x00
Reserved db 0
BootSig db 0x29
VolumeID dd 1
VolumeLavel db "ChaOS", 0, 0
FileSysType db "FAT12   "
End_FatSB:


CreateStack:
cli
cld

mov ax, STACK_SEGMENT
mov ss, ax
mov sp, STACK_OFFSET
mov ax, cs
mov ds, ax
mov es, ax

sti
mov [DrvNum], dl
mov si, start_msg
call Print


ReadFAT:
mov ax, [ResvdSecCnt]
mov cx, [FATSize]
mov bx, FAT_SEGMENT
mov es, bx
mov bx, FAT_OFFSET

ReadFAT_loop:
call ReadSector
inc ax
add bx, 512
loop ReadFAT_loop


ReadRD:
mov ax, [RootEntCnt]
mov bx, 32
mul bx
mov bx, 512
xor dx, dx
div bx
mov cx, ax
push cx

sektoren
xor ax, ax
mov al, [NumFATs]
mul word [FATSize]
add ax, [ResvdSecCnt]
push ax

mov bx, RD_SEGMENT
mov es, bx
mov bx, RD_OFFSET

ReadRD_loop:
call ReadSector
inc ax
add bx, 512
loop ReadRD_loop


FindKernel:
mov cx, [RootEntCnt]
mov di, RD_OFFSET

FindKernel_loop:
push cx
mov cx, 11
mov si, kernel_name
repe cmpsb
pop cx
je FoundKernel
add di, 21
loop FindKernel_loop

jmp KernelNotFound

FoundKernel:

pop dx
pop bx
add dx, bx
add di, 15
mov ax, [es:di]
mov bx, KERNEL_SEGMENT
mov es, bx
xor bx, bx

LoadKernel_loop:
pusha
mov ah, 0x0e
mov al, '.'
mov bx, 0x0007
int 0x10
popa


push ax
add ax, dx
dec ax
dec ax
call ReadSector
pop ax


push dx
push es
mov cx, ax
mov bx, 3
mul bx
mov bx, 2
xor dx, dx
div bx
mov bx, FAT_SEGMENT
mov es, bx
mov bx, ax
mov ax, [es:bx]


test cx, 1
jz IsEven
shr ax, 4
jmp LoadKernel_loopTail

IsEven:
and ax, 0xfff

LoadKernel_loopTail:
pop es
pop dx
mov bx, es
add bx, 0x20
mov es, bx
xor bx, bx
cmp ax, 0xfff
jne LoadKernel_loop

mov dl, [DrvNum]
jmp KERNEL_SEGMENT:0


KernelNotFound:
mov si, no_kernel
call Print


Hang:
xor ax, ax
int 0x16
jmp 0xffff:0x0000


ReadSector:
pusha
mov bp, 4

ReadSector_loop:
xor dx, dx
div word [SecPerTrack]
inc dl
mov cl, dl
xor dx, dx
div word [NumHeads]
mov dh, dl
mov ch, al
mov dl, [DrvNum]
mov al, 1
mov ah, 2
int 0x13
jnc ReadOk
dec bp
jz ReadError
jmp ReadSector_loop

ReadOk:
popa
ret

ReadError:
mov si, read_err
call Print
mov si, reboot
call Print
call Hang


Print:
Print_loop:
lodsb
or al, al
jz EndPrint
mov ah, 0x0e
mov bx, 0x0007
int 0x10
jmp Print_loop

EndPrint:
ret


start_msg db 'ChaOS-Booty 0.0.0.1', 0
no_kernel db 13, 10, 'kernel not found', 13, 10
reboot   db ' press any key to reboot', 0
read_err  db 13, 10, 'read error', 13, 10

kernel_name db 'KERNEL  SYS'


times 510-($-$$) db 0
dw 0xaa55

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« Antwort #13 am: 26. October 2006, 14:36 »
@Coffee: [...] Ohne Dateisystem ist das OS schrott bzw. wird es schrott sein. Ein OS ohne Dateisystem ist in meinen Augen kein OS. Denn ein großes Merkmal eines OS ist das Dateisystem. [...]

bitmaster

1. Das ist völlig abhängig wofür das OS zuständig sein soll. FS oder kein FS ist für mich ne frage wie Multi- oder Single- Tasking.

2. Ich würde eher das lesen/schreiben von Dateinen als DAS Merkmal von OSs betrachten, weniger das besitzen eines Dateisystemes.

3. Allerdings ist "Dateisystem" recht dehnbar. Ist nooooooooos Vorschlag schon ein FS?? MUSS ein FS Verzeichnisse unterstützen?? Muss ein FS die mögloichkeit beieten, Dateien zu "Zerteilen"??. Muss ein FS den Dateien Namen zuweisen (bzw anderrum)??

Ich denke, das es teilweise reicht, zu sagen: "Hallo OS: Ich möchte die Daten von Sektor 1313 an die adresse 0xAFFE laden und ausführen."

Zur sprache:
Syntax:
Befehle:
BEFEHL <arg 1> <arg 2> ... <arg n> (BEFEHLENDE)

Sprünge
LABEL 'name'
in eine Struktur (Liste) den Namen speichern, und ihm die Zeilennummer zuweisen
GOTO 'name'

In der Liste nach dem Namen suchen, die entsprechede Zeilennummer nehmen und zu dieser Zeile Springen
!!Vor dem Interpretieren des 1. Befehls muss die Gesammte datei durchgelesen werden um alle Label zu erkennen!!

Achja!
Überleg dir auch, wie du das mit Konstanten-rechnungen machen willt.
z.B. 3+5*2-(2+4)
Soll das möglich sien, oder soll man im ASM-Style dafür funktionen nutzen (ADD, SUB, ...)

Das ist natürlich nur eine Möglichkeit von 1000.
« Letzte Änderung: 26. October 2006, 14:40 von RedEagle »

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 26. October 2006, 17:22 »
Mhm...da würd ich zustimmen...nur das ADD usw. in ASM keine Funktionen sind^^

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #15 am: 26. October 2006, 17:39 »
@RedEagle: Das sehe ich persönlich anders. Vorübergehend kann mann ja auf Verzeichnisse verzichten. Nur ein vernünftig strukturiertes Dateisystem sollte in meinen Augen ein OS schon unterstützen.

bitmaster
In the Future everyone will need OS-64!!!

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« Antwort #16 am: 26. October 2006, 17:48 »
Es kommt halt auf die art, bzw aufgabe, des Systems an.
Ein System wie Linux/Windows, also ein universal-OS das einfach zu bedienen sein soll, braucht natürlich ein umfangreichen Dateisystem.

Aber wenn das OS nur dazu dient, z.B. eine Selbstentwickelte Hardware anzusteuern, oder der user überhaupt nicht mit Dateien in Kontakt kommen soll, währe ein Dateisystem überflüssig.


Coffee

  • Beiträge: 470
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 26. October 2006, 19:30 »
nagut ich probiers nochmal aber kann mir einer sagen wieso mein bootloader nich geht

Biehler Productions2

  • Beiträge: 47
    • Profil anzeigen
    • http://biehlos.biehler-josef.de
Gespeichert
« Antwort #18 am: 27. October 2006, 15:03 »

Also ich seh auf die schnelle nur, dass du dem INT13h nirgends die offsetadresse übergibst.
Kann aber auch sein, dass ich das irgendwo übersehen hab  :wink:
Die offsetadresse müsst in BX übergeben werden, wenn ich mich noch recht erinnere?

ReadSector:
pusha
mov bp, 4

ReadSector_loop:
xor dx, dx
div word [SecPerTrack]
inc dl
mov cl, dl
xor dx, dx
div word [NumHeads]
mov dh, dl
mov ch, al
mov dl, [DrvNum]
mov al, 1
mov ah, 2
int 0x13
jnc ReadOk
dec bp
jz ReadError
jmp ReadSector_loop

ReadOk:
popa
ret




 

Einloggen