GO

Dros (meupropio Sistema Operacional)

Por Gofaia, 22 de jan. de 2009 em Resolvidos

21
3.3k
GofaiaG
22 de janeiro de 2009 às 10:20

D.R.O.S.zip Olá,

 

Venho aqui informar que lançamos(eu e meu primo[Canguru]) a versão 0.01 do meu sistema operacional que se chama DROS.

 

A ideia é fazer um sistema operacional leve e completo, com uma interface de programação amigavel , simples e completa. O sistema operacional lembra muito o MS-DOS 6.22, pois nao tem interface grafica ainda. E nem suporte a rede.

 

 

Ele é freeware, mas nao é open source.

 

O projeto esta meio devagar devido a problemas no meu teclado(nao fica mais de um minuto ligado) e a falta de comunicação entre membros da equipe[canguru sem internet] ;)

 

O boot ainda esta em desenvolvimento, assim como o kernel. E nenhum dos dois estao prontos, ambos em desenvolvimento e com muitos erros, nada que nao se resolva... Por enquanto ele roda dentro do propio windows, como se fosse um aplicativo

 

Os comandos diponiveis por enquanto são:

No menu principal:

ajuda: Exibe o menu ajuda

cor: muda a cor da fonte

sair ou exit: sai do DROS

navegador: Inicia o navegador(gerenciador de pastas) do DROS

 

Comando do navegador:

abrir: abre uma pasta

mover: move um arquivo

renomear: muda o nome de um arquivo

jogos: atalho para a pasta jogos

ultilitarios: atalho para a pasta de ultilidades

execute: executa um arquivo

excluir: remove um arquivo ou diretorio

copiar: faz uma copia de um arquivo

exit: volta ao menu princiapal do dros

 

 

Qualquer duvida, surgestão o opinião postem aqui. E comentem, é importante para a DROS Team.

 

Eu retirei o link porque ele ta dando um erro critico :S

Faz o pc ficar reiniciando.... rsrsrs

E em alguns sistemas acusa ter trojan ;(

 

Qndo arrumar eu posto aqui

 

Até a proxima

Editado Janeiro 22 por Gofaia

SkywarS
22 de janeiro de 2009 às 11:06

Poste uma foto ? Legal sua iniciativa de fazer um sistema operacional, vai que fica famoso *-*.

JvchequerJ
22 de janeiro de 2009 às 11:11

Muito bacana seu projeto...

Espero que tudo dê certo e que vocês possam avançar sempre e sempre... :]

 

Boa sorte Gofaia linda :***

Darth SidiousD
22 de janeiro de 2009 às 11:27

Nossa, esse projeto é muito interessante...

 

Boa sorte, vai precisar.

 

Se puder postar fotos...

Rafael GomesR
22 de janeiro de 2009 às 13:51

boa sorte o caralho!

 

que pegue fogo nesse hd que tá o projeto e perca tudo!

Editado Janeiro 22 por RaFaX

LordfireL
22 de janeiro de 2009 às 14:29

Ooo muito bom (Y)

Tomara que tenha bastante sucesso

Um SO brasileiro vai ser bom, melhor que os Windows em português porém pirateados :(

 

 

Boa sorte Gofaia linda :***

/\ euri

Editado Janeiro 22 por Lordfire

LeoneFML
22 de janeiro de 2009 às 22:57

Isso é ridículo o Windows 4 bate isso.

Na verdade antigamente os sistemas operacionais eram assim, por isso o windows ganhou fama, não precisa ficar usando o cmd.

looktovaskL
23 de janeiro de 2009 às 00:49

@up rlx eh a primeira versão futuramente fica melhor, ainda por cima eh um sistema operacional caseiro D8

 

@tpc

boa ideia, vc tem futuro

se precisar eu ajudo na interface grafica (da pa fazer pelo paint como sprites com sombreamento parecido soh que em maior escala)

DiogoKinaghtD
23 de janeiro de 2009 às 09:16

eu lembro que tinha um cara que fez uns comando tipo:

 

@echo off = cala boca

 

boa sorte, mas não é open-source pq é tipo um DOS modificado ou vc nao quis fazer?

GofaiaG
23 de janeiro de 2009 às 12:47

Hahahaha

 

Agradecemos pelos elogios(a equipe toda)

 

E a quem nao criticou(apenas chingou)

Eu duvido fazer um programa que rode a nivel de maquina, afinal voce tem que fazer um boot em assembly, e ele precisa ter exatamente 512 kbytes. Algo parecido com este:

 

LOADED EQU 7C00h

END_BIOS_DATA EQU 0500h

BUFFER_SEGMENT EQU 07E0h

; erros possiveis

No386 EQU '3'

ErrorLoadingRootDir EQU 'R'

OSFILENotFound EQU 'O'

ErrorLoadingFATs EQU 'F'

ErrorLoadingCluster EQU 'C'

InternalFATError EQU 'I'

 

bits 16 ; modo real 16 bits

 

org 7C00h ; estamos em 0000h:7C00h

; Cebecalho para compatibilidade com MS-DOS FAT12

; para mais informacoes, consulte o arquivo

jmp short Inicio

nop

db 'dros ' ; 8-bytes para o nome

dw 512 ; tamanho do setor em bytes

db 1 ; setores por cluster

dw 1 ; clusters reservados

db 2 ; numero de FATs

dw 224 ; entrada do diretorio principal

dw 2880 ; total de setores

db 0F0h ; formato

dw 9 ; setores por FAT

dw 18 ; setores por trilha

dw 2 ; lados

dd 0 ; setores ocultos

dd 0 ; mais setores

db 0 ; Id do driver

db 0 ; reservado

db 4 ; assinatura de boot

db 435101793 ; numero do volume serial

db 'NO NAME ' ; nome do label (11 bytes)

db 'FAT12 ' ; sistema de arquivo (8 bytes)

 

Inicio:

mov ax, 0x0003

int 0x10 ; Limpa a tela e assegura que estamos

; no modo 80x25

 

mov ah, 0x01

mov cx, 0x2000

int 0x10 ; Desabilita o cursor

 

xor ax,ax ; seta pilha para 0000h:7C00h

cli ; nada de interrupcoes

mov ss,ax ; mudamos o endereco da pilha para evitar

; que percamos dados no endereco 0000:0500h

mov sp,LOADED

sti ; pilha agora tem 30646 bytes disponiveis

 

push cs ; registrador de dados para o local correto

pop ds

 

mov bp,dx ; armazena o numero do driver(i.e.0=disquete,80=Hd) em BP

; O numero do driver sera passado para o

; OSFILE

 

; verifica se o processador eh 386+

mov ah,01110000b ; Tentando setar o IOPL & NT flags.

push ax ; (IOPL no bits 12-13 & NT no bit 14)

popf ; Se nao estao setados, nao eh um 386

pushf

pop ax

and ah,01110000b ; Verifica se IOPL & NT ainda estao setados

jz ShowError286 ; Nao pode pular sobre mais de 128 bytes usando

; um jump no 286. Entao, dois jumps

 

push cs ; modifica o segmento Extra

pop es

 

; carrega o diretorio principal - INT 13h/02h - READ SECTORS

mov byte [ErrorCode],ErrorLoadingRootDir ; Codigo de Erro

mov ax,020Eh ; 0Eh = 224 entradas * 32 bytes por entrada / 512

mov bx,END_BIOS_DATA ; ES:BX local do buffer

mov cx,0002h ; Trilha 0, Setor 2

mov dh,01h ; Lado 1, DL aindo contem o numero do driver

int 13h ; 0Eh+02h=16, entao nao teremos "track boundary"(limite de trilha)

jc ShowError286 ; Pula para a rotina se algum erro ocorreu

 

; procura pelo OSFILE no diretorio princpal

mov di,END_BIOS_DATA

mov dx,224 ; Numero de entradas no diretorio principal

mov byte [ErrorCode],OSFILENotFound ; Codigo de Erro

Search:

mov cx,11 ; 8 + 3 nome do arquivo + extensao

mov si,FileName ; DS:SI ponteiro para o OSFILE

rep cmpsb ; verifica se o arquivo existe

jz Found ; achou ? pula codigo

dec dx ; Nao ? ainda tem entradas validas ?

jz ShowError286 ; Nao ? Entao a ultima entrada foi checada

add di,21 ; Sim ? verifica na proxima entrada

add di,cx ; adiciona o resto dos bytes que nao condizem

jmp Search ; procura novamente

 

ShowError286: ; Nos temos que colocar um segundo jump aqui porque o

JMP ShowError ; 286 nao pode dar um pulo sobre 128 bytes

 

Found: ; Ok! arquivo encontrado

; DI eh o ponteiro para os atributos do arquivo

 

mov eax,[di+17] ; Pega o tamanho do arquivo em bytes (dword)

mov [KrnSize], eax ; Salva o tamanho em bytes para passar ao OSFILE

add eax,512-1 ; Calcula o numero de setores usados

shr eax,9 ; EAX <- EAX / 512

push ax ; Salva o numero de setores a serem lidos

mov ax,[di+15] ; Primeiro Cluster do OSFILE

push ax ; Salva o primeiro cluster

 

; Carrega a primeira FAT na memoria - usando a INT 13h/02h

mov ax,0209h ; ler 9 setores

mov bx,END_BIOS_DATA; ES:BX local do buffer

mov cx,0002h ; Trilha 0, Setor 2

mov dx,bp ; Numero do driver

xor dh,dh ; tamanho 0

int 13h

jnc FATloaded ; Se CF, tentar ler a segunda FAT

 

mov byte [ErrorCode],ErrorLoadingFATs ; Codigo de Erro

; Carreaga a segunda FAT na memoria - usando INT 13h/02h

; Devido a um "track boundary" vai ocorrer na segunda FAT

; nos temos que usar duas leituras.

mov ax,0208h ; Ler os 8 primeiros setores

mov cl,0Bh ; Trilha ainda eh 0, Setor 0Bh = 2 + 9

int 13h ; DL & DH ainda estao corretos

jc ShowError286 ; Nao pode ser a segunda FAT ?Erro...

mov ax,0201h ; Ultimo setor a ser lido

mov bx,END_BIOS_DATA + 512*8 ; 512 * 8 = primeiros 8 setores

mov cl,01h ; Trilha ainda eh 0, Setor 1

mov dh,01h ; Lado 1, DL ainda esta correto

int 13h

jc ShowError ; Nao pode ser a segunda FAT ?Erro...

 

FATloaded:

; Carrega o OSFILE usando FAT12

pop ax ; AX = Primeiro Cluster

pop cx ; CX = Numero de clusters a serem lidos

mov bx,BUFFER_SEGMENT ; ES ponteiro para o final do setor de boot ((07E0h)

mov es,bx

NextCluster:

mov byte [ErrorCode], ErrorLoadingCluster

; AX = Corrente cluster a ser lido

; ES = Segmento do buffer

; CX = Numero de clusters a serem lidos

pusha ; Talvez nao altere AX,ES,CX (so 1 byte)

add ax,31 ; Converte o Cluster para setores logicos

; 31 = SetoresReservados + SetoresOcultos

; + FATS * SetoresPorFAT + Dir - 2

xor dx,dx ; Converte setores logicos para CHS

mov bx,18 ; CL := ((AX-1) MOD 18)+1

div bx ; CH := (AX-1) DIV 36

mov ch,al ; DH := ((AX-1) DIV 18) AND 1

inc dx

mov cl,dl

and AL,1 ; DH = Lado

mov dx,bp ; Carrega numero do drive

mov dh,al ; CH = Trilha

shr ch,1 ; CL = Setor

mov ax,0201h ; Ler 1 setor usando INT 13h/02h

xor bx,bx ; ES:0000h local do buffer

int 13h

jc ShowError ; Falha na leitura do cluster

popa ; Restaura AX, ES, CX

 

; Pega o proximo Cluster usando FAT12

mov byte [ErrorCode], InternalFATError

mov bx,ax

shl bx,1

add bx,ax

shr bx,1 ; BX = AX * 3 / 2;

and ax,1

mov ax,[END_BIOS_DATA + BX]

jz EvenCluster ; um MOV nao altera o flag Z

shr ax,4

EvenCluster:

and ax,0000111111111111b ; Entrada da FAT so leva 12 bits

cmp ax,0000h ; Se Cluster livre

je ShowError

cmp ax,0FF7h ; Se Cluster ruim

je ShowError

 

mov bx,es ; Incrementa ES para o proximo

add bx,512/16 ; bloco de memoria que sera preenchido

mov es,bx

 

loop NextCluster ; Ate CX=0, ultimo setor lido

 

mov dx,bp ; Passa o numero do drive par o OSFILE

; O numero do drive sera guardado em bp

 

mov ax,BUFFER_SEGMENT ; Segmento

mov ds,ax

mov es,ax

mov fs,ax ; so para completar...nem precisava

mov gs,ax ; idem..

mov eax,[KrnSize] ; eax sera passado para o OSFILE com o seu

; tamanho em bytes

push eax

; os seguinte parametros estarao disponiveis ao OSFILE

; DL = numero do drive

; EAX = tamanho em bytes do OSFILE

jmp BUFFER_SEGMENT:0000h ; Bye..bye...boot

 

; procedure locais

ShowError:

mov cx,MessageSize

mov si,Message

.ShowNextChar

lodsb

mov ah,0Eh ; apresenta caracter usando INT 10h/0Eh

mov bx,0007h ; Pagina 0, Cor normal

int 10h

loop .ShowNextChar ; ate apresentar toda a mensagem

 

xor ah,ah ; espera pressionar uma tecla

int 16h

 

xor dx,dx ; primeiro disquete

int 19h ; forca BIOS a executar todo novamente

 

; dados locais

Message db 13,"Sem o dros ou falha no disquete. Codigo '"

ErrorCode db No386,"'.",10,13 ; No386 eh o primeiro erro

db 'Troque o disquete e pressione ENTER...',10,10,13

MessageSize equ $ - Message

 

FileName db 'dros SYS' ; deve ser 11 bytes

KrnSize dd 0

 

TIMES 510-($-$$) DB 0 ; posicionamento da assinatura

DW 0xAA55 ; assinatura de boot

 

E depois voce tem que desenvolver um kernel, algo que interplete os comandos entre o sistema operacional e o processador, e depois de tudo, voce tem que usar milhões de ponteiros e endereços, pois nao é possivel usar variaveis.

 

Então, voce que achou o meu sistema operacional uma porcaria, ou que desejaram que me hd pegasse fogo, eu desafio voces a fazenrem um SO.

LeoneFML
23 de janeiro de 2009 às 13:06

#Gofaia

 

Você deve respeitar as opiniões dos outros e não crítica-los.

GofaiaG
23 de janeiro de 2009 às 13:21

#LeoneFM

 

Desejar que o hd outro pegue fogo é respeitar?

Rafael GomesR
23 de janeiro de 2009 às 14:08

Não não, o hd apenas não...

 

Pegue fogo você também ¬¬'

DiogoKinaghtD
23 de janeiro de 2009 às 14:36

ashuasuhsauhas hd pega fogo.......... eu curti a idéia de DROS

 

mas afinal, pq nao é open-source? '.'

GofaiaG
23 de janeiro de 2009 às 15:40

A maioria da equipe nao concordou =)