Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - lweb20

#1
ASM / Modo de video VGA
20 Octubre 2013, 17:52 PM
Buenas, aquí estoy de nuevo con la programación de mi SO. Por favor quisiera que me ayuden en lo siguiente:

He conseguido estos datos sobre el VGA:
Tamaño total: 256 KiB de VRAM
Cantidad de colores máximo: 256
Máximo de 720 píxeles horizontales
Máximo de 480 líneas
Tasa de refresco de hasta 70 Hz

He conseguido entrar a un modo unchained (modo X) 320x240x256 como máximo. Quisiera saber si puedo obtener una resolución algo más alta como 640x480x256.

Y si alguien me puede explicar sobre la VRAM cómo funciona, es decir, máximo cuántos bytes por página hay en los modos X.

Estaría muy agradecido si me ayudaran. Gracias de antemano.


Si alguno de ustedes desea colaborar con el desarrollo del SO sin fines de lucro también están bienvenidos.
#2
Gracias me haz aclarado muchas dudas.
#3
Ah si me olvidé mencionar que estoy trabajando en 32 bits.

Reformulo mi pregunta ya que he hecho varios cambios. ¿Es posible que un handler de interrupción (por ejemplo del PIT) sea fastcall? y cómo.

- pushad y popad meten y sacan los registros del CPU de 32 bits.

EDIT

- el tipo de llamada o convención _fastcall es más rápido que _cdecl verdad?
#4
Buenas, aquí estoy continuando con el desarrollo de mi sistema operativo.

Hoy decidí cambiar la convención de llamada de mi sistema de _cdecl a _fastcall porque si no me equivoco _fastcall reduce el tamaño del ejecutable y casi siempre usa registros en lugar de la pila, lo cual lo hace más veloz al SO. (Corríjanme si me equivoco).

Resulta que tuve un pequeño problema con las interrupciones del SO (el manejador del teclado, etc..).

El manejador del teclado dejó de funcionar :o. Entonces empecé a testear y testear, investigar e investigar y nada :(. Aquí les dejo el código a ver si alguien me da una mano:

void __cdecl Teclado::manejador(){
_asm cli // deshabilito interrupcionnes
_asm pushad // guardo registros generales en la pila

// aquí va todo el código para controlar las teclas... etc......

_asm popad // saco los registros guardados de la pila
_asm sti // habilito interrupciones si no me quedo colgado xD
_asm iret // salgo de la interrupción
}


El error que sale es Invalid opcode.

También tengo la duda si el manejador debe ser _cdecl o puede ser _fastcall porque con ninguna funciona :(

Ojalá alguien pueda ayudarme por favor  ;D
#5
Cita de: Cönnectome en 18 Mayo 2013, 16:09 PM
Buenas,

Aprovecho este post para preguntar..., es verdad que Windows dificulta la posibilidad de acceder el hardware?,
...


Amigo, crea tu propio post. Reglas del foro.



EI: juntando mensajes.



x64Core Gracias por la información. Me servirá más adelante cuando logre usar VirtualBox con VS2012 para la creación de drivers ya que en estos momentos no me deja depurar el driver.
#6
Hola, aquí estoy de nuevo.

Estuve un rato en el foro leyendo algunos post y me hizo acordar sobre una época que logré hacer un driver para Windows 7 ( casi todo copy/past ) para hookear el CreateProcess.

Una vez consulté aquí en el foro sobre una duda y me respondió "Eternal Idol" y me dijo que no es buena idea hookear ya que en 64-bit no funciona, y eso me hizo pensar muchas cosas.

1) ¿Cómo hacen los antivirus para analizar cada proceso que se abre y detener la ejecución antes que empiece?

2) ¿Acaso existe otro método que no sea hookear?

3) ¿Qué mas se pueden hacer con los drivers? ( aparte de usarlo con hardware claro )

Agradecería mucho alguna aclaración.

EDIT: Y por de casualidad. ¿Alguien conoce manuales sobre el kernel de Windows en español? ya que estos temas son complicaditos y difíciles de entender sobre todo cuando está en inglés 100 hojas :P
#7
Hola a todos. Continuando con el desarrollo de mi SO.

Tengo una duda:

Si tengo el siguiente código de ejemplo:


KERNEL:


void EjecutarProceso(int id){
  ...
  _asm iret // interrupt return
}

void sys_TerminarProceso(){
  ...
}

void EjecutarPrograma(){
  int id = CrearProceso("programa.exe");
  EjecutarProceso(id);

  continuar:
  ...
}



PROGRAMA:


#include "syscalls.h"

void main(){
  ...
  sys_TerminarProceso();
}


Explico:

El código de ejemplo lo asemejo a un código para entrar al modo usuario desde el kernel, ejecutar un programa y regresar al modo kernel ( todo funciona perfectamente ). Lo que quiero hacer es que cuando termine el proceso "sys_TerminarProceso" continúe al label "continuar".

Para ello he pensado en 2 alternativas:

PRIMERA ALTERNATIVA ( probada y sí funciona ) :

a) Pasarle como parámetro a "EjecutarPrograma" la dirección de "continuar".
b) Guardar esa dirección en la memoria mediante una variable global.
c) Cuando el programa ( usuario ) ejecute sys_TerminarProceso, esta función ejecutará al final ( después de los ... ) dicha dirección del label.
d) Enjoy! :P

Bueno este es muy seguro y lógico a mi parecer, pero... este "EjecutarPrograma" también lo ejecutará el cliente como un "sys_EjecutarPrograma" y bueno no es muy normal que ejecute algo así: "EjecutarPrograma(etiquetaparacontinuar)".

SEGUNDA ALTERNATIVA ( dudas, problemas ) :

Obtener la dirección de una vez pasada la llamada "EjecutarProceso(id);", es decir, por donde está continuar ( sin el label claro ).


Si alguien tiene alguna idea agradecería mucho su ayuda. Gracias por la atención.
#8
ASM / Re: Modo protegido, dolor de cabeza
4 Marzo 2013, 19:41 PM
Cita de: x64Core en  4 Marzo 2013, 19:38 PM
Disculpen pero tengo una pregunta razonable, @lweb20:
Como pensas crear ya sea un kernel o SO si nisiquiera sabes como programar en C/C++ y resolver problemas depurando?
me refiero a que para programar tal cosa no solo se necesita un nivel basico del conjunto de instrucciones y de C/C++.
Creo que primero se empieza con un calculadora no ? Bueno es solo pregunta.


Sí sé programar en C pero obviamente no lo sé todo.
#9
ASM / Re: Modo protegido, dolor de cabeza
4 Marzo 2013, 17:52 PM
Cita de: Eternal Idol 7D en  4 Marzo 2013, 17:50 PM
Gracias, tratemos de no desviar el tema, como ya dije antes este no es el foro idoneo para desarrollo de Kernels o S.O., asi que por favor tratemos de centrarnos en las dudas concretas que se plantean.

Para publicar codigo, discutir standards y demas ya se citaron varios foros incluyendo el de uno de los usuarios que participa en el hilo.

Exacto. Ese es el problema de este foro. Pero está muy bien así ya que está más ordenado.
#10
ASM / Re: Modo protegido, dolor de cabeza
4 Marzo 2013, 17:47 PM
pm.

Edito:

Tengo implementado el GDT, IDT, PIC, PIT (lo básico). De ahí deriva los controladores de excepciones. Sistema multipantalla (yo lo inventé :P). Orientado a objetos.