Comunidade OSDevBrasil.net
Fevereiro 09, 2012, 05:48:05 *
Bem-vindo, Visitante. Por favor faça o Login ou Registro.

Login com nome de usuário, senha e duração da sessão
Notícias: Anuncie a nossa comunidade a amigos, fóruns...
 
   Home   Ajuda Pesquisa Login Registrar  
Páginas: [1]
  Imprimir  
Autor Tópico: COMO ACESSAR O DISCO USANDO APENAS LINGUAGEM C  (Lida 1099 vezes)
cianos
OS Newbie
*

Karma: 0
Mensagens: 8


Projetando o Futuro

ciano@ymail.com
Ver Perfil WWW Email
« : Abril 12, 2010, 06:40:47 »

 SorridenteSou novo no forum, mas ate o momento não encontrei nada que possa me ajudar em uma dúvida.

Como faço para acessar o HD via código em linguagem C, já dei uma boa olhada no SOmBRA, mas ainda não consegui entender. o que me paresse que o Assembler é Totalmente fundamental para essa ação. Problema que os códigos em Assembler ainda são pouco confusos.

Quem pudar ajudar!!!!, Tou adaptando algumas ideias para um S.O. e irei posta-las em breve..

Uma ideia que achei interessante foi usar
#define Function void*
isso permite que eu use Function em algumas funções dentro do C como em outras linguagens e me retorne um valor que pode ser convertido para qualquer tipo.. isso está me facilitando muito.
Registrado
gnomo
Moderador Global
OS Full Member
*****

Karma: 6
Mensagens: 173


gnomo_86@linuxmail.org
Ver Perfil WWW Email
« Responder #1 : Abril 13, 2010, 12:56:46 »

Bem, no fim das contas tem que ter um pouco de "assembly direto" ("direto" porque no fim das contas tudo vira assembly, ate mesmo o codigo C) para no minimo as funções de entrada e saida (inportb, outportb). Com "in" e "out" assembly, acho que já é suficiente para fazer todo o resto do codigo em C.
Registrado

Projeto SOmBRA - http://code.google.com/p/projeto-sombra
E-Mail: gnomo@projeto-sombra.org

S.O.: Debian 6.0 "Squeeze"

cianos
OS Newbie
*

Karma: 0
Mensagens: 8


Projetando o Futuro

ciano@ymail.com
Ver Perfil WWW Email
« Responder #2 : Abril 13, 2010, 11:32:02 »

OK! Eu consegui entender como funciona o o codigo para reconhecer o DRIVE de disket, mas como faço isso para os outrso dispotivos. no caso do HD é para criar um sistema de arquivos simples, somente para carregar os modulos, sem o uso do assemble e nem no grub. Como o Windows FAZ.

Olha o código para reconhecer o DISKET, bom agora tenho que descobrir como reconhece os setores.Oo
LEMBRANDO:::
#define Function void*
----o driver_floppy.h
Function Floppy_Detect();
Function Floppy_View_TESTE();

-----o driver_floppy.c
#include <driver_floppy.h>


#include <stdio.h>
int a,b;
Function Floppy_Detect()
{
   unsigned char c;
   outportb(0x70, 0x10);
   c = inportb(0x71);


   a = c >> 4; // get the high nibble
   b = c & 0xF; // get the low nibble by ANDing out the high nibble
   return 0;
}

Function Floppy_View_TESTE()
{
   char *drive_type[5] =
   {
      "no floppy drive", "360kb 5.25in floppy drive",
      "1.2mb 5.25in floppy drive",
      "720kb 3.5in",
      "1.44mb 3.5in",
      "2.88mb 3.5in"
   };
   printf("Floppy drive A is an:\n");
   printf(drive_type[a]);
   printf("\nFloppy drive B is an:\n");
   printf(drive_type);
   printf("\n");
   return 0;
}
 Sorriso for&ccedil;ado Sorriso for&ccedil;ado Sorriso for&ccedil;ado Sorriso for&ccedil;ado Sorriso for&ccedil;ado Sorriso for&ccedil;ado Sorriso for&ccedil;ado Sorriso for&ccedil;ado Sorriso for&ccedil;ado Sorriso for&ccedil;ado L&iacute;ngua L&iacute;ngua L&iacute;ngua L&iacute;ngua L&iacute;ngua L&iacute;ngua L&iacute;ngua L&iacute;ngua L&iacute;ngua L&iacute;ngua L&iacute;ngua Contente Contente Contente Contente
Registrado
gnomo
Moderador Global
OS Full Member
*****

Karma: 6
Mensagens: 173


gnomo_86@linuxmail.org
Ver Perfil WWW Email
« Responder #3 : Abril 15, 2010, 10:54:05 »

Independente do sistema operacional, tudo se resume e instruções binárias que são representadas pelos mnemônicos no Assembly, se você faz em C, C++, Pascal, Basic, ou qualquer outra, no final o compilador sempre irá traduzir esse código para a linguagem assembly, o fato de colocar uma pitada de Assembly em um código C apenas esta tornando o Assembly explícito. No Windows não é diferente, a diferença é que você estaria programando sobre uma camada que tenta esconder esses detalhes.
Registrado

Projeto SOmBRA - http://code.google.com/p/projeto-sombra
E-Mail: gnomo@projeto-sombra.org

S.O.: Debian 6.0 "Squeeze"

cianos
OS Newbie
*

Karma: 0
Mensagens: 8


Projetando o Futuro

ciano@ymail.com
Ver Perfil WWW Email
« Responder #4 : Abril 15, 2010, 09:50:01 »

GNOMO eu entendo a necessidade do Assembler, mas a minha duvida, é como faço isso usando Linguagem C. Principalmente como encontrar a quantidade de dispositivos de armazenamento..
Registrado
gnomo
Moderador Global
OS Full Member
*****

Karma: 6
Mensagens: 173


gnomo_86@linuxmail.org
Ver Perfil WWW Email
« Responder #5 : Maio 06, 2010, 02:02:57 »

Você pode usar Assembly inline, ou criar arquivos assembly separados e linkar tudo no final.

http://www.oldlinux.org/Linux.old/Ref-docs/gcc-inline-asm.pdf (tem muitos outros links se procurar no google )
Registrado

Projeto SOmBRA - http://code.google.com/p/projeto-sombra
E-Mail: gnomo@projeto-sombra.org

S.O.: Debian 6.0 "Squeeze"

Windowstec
OS Jr. Member
**

Karma: 1
Mensagens: 65


Estudante

gilmendes_999@hotmail.com
Ver Perfil WWW Email
« Responder #6 : Maio 14, 2010, 04:49:05 »

cianos, o ideal é usar sempre assembly nestas funcionalidades base, mas para a frente todo fica mais fácil.
Só precisas de um pouco de paciência Sorridente
Registrado

Windowstec OS - O link no google Code foi cancelado brevemente em domínio próprio.
Windowstec - www.windowstec.netne.net
estevaomoraes
OS Newbie
*

Karma: 0
Mensagens: 4


Ver Perfil
« Responder #7 : Julho 04, 2010, 12:40:31 »

SorridenteSou novo no forum, mas ate o momento não encontrei nada que possa me ajudar em uma dúvida.

Como faço para acessar o HD via código em linguagem C, já dei uma boa olhada no SOmBRA, mas ainda não consegui entender. o que me paresse que o Assembler é Totalmente fundamental para essa ação. Problema que os códigos em Assembler ainda são pouco confusos.

Quem pudar ajudar!!!!, Tou adaptando algumas ideias para um S.O. e irei posta-las em breve..

Uma ideia que achei interessante foi usar
#define Function void*
isso permite que eu use Function em algumas funções dentro do C como em outras linguagens e me retorne um valor que pode ser convertido para qualquer tipo.. isso está me facilitando muito.


BOM, SE FOR PROGRAMAR TEM Q ENTERDER DO PADRAO ATA COMO ACESSA-LO E INTERPRRETAR SUA INTERRUPÇÃO USAR DMA BUS MATER PCI DA IDE E CONHECIMENTO DE ALGUM FORMATO DE ARQUIVO, O MAIS FACIL O FAT, PODENDO USAR EM MODO REAL OU PROTEGIDO, DA PRA USAR TB INT 13 , SE TIVER NO MODO PROTEGIDO TERA Q VOLTAR NO MODO REAL PRA USAR-LO, UMA DICA, VC TERA Q ESTUDAR MUITO, JA ESTUDO A 12 ANOS COMPUTAÇÃO POR CONTA, SEI TODA TEORIA DA ARQUITETURA DE PC E COMO PROGRAMAR, TB TO COM PROJETO DE UMA OS PRA AUTOMAÇÃO INDUSTRIAL, NO PROTOCOLO MODBUS. SEI PROGRAMAR USB 1 E 2, MOUSE TECLADO PS\2, VIDEO VESA, LIGUAGEM DE IMPRESSORA HPCL DA HP E PS POST SCRIPT, PLUG-PLAY PCI , MUTIPROCESSADOR APIC ETC. TENHO TODA BASE VOU COMEÇAR A FAZER, QUERIA AJUDA PRA FAZER, TEORIA TENHO. MAS TEM Q ENTENDEER MUITO DE ARQUITETURA PC.

Registrado
Páginas: [1]
  Imprimir  
 
Ir para:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.14 | SMF © 2006-2009, Simple Machines LLC XHTML 1.0 Válido! CSS Válido!