Ir para conteúdo
  • 0

Dros (meupropio Sistema Operacional)


Gofaia

Pergunta

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 por Gofaia
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

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 por Lordfire
Link para o comentário
Compartilhar em outros sites

  • 0

@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)

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...