Anuncios Google

DarkSo - Mi primer contacto con el manejo del Hardware de PC

Pues hace ya algunos dias que llevo haciendo pruebas de codigo ensamblador(mas bien poco, solo el arranque)y en C para tratar de hacer un SO a lo MSDOS para PC. Por el momento no lleva nada interesante y no es funcional a ningun nivel(si no se considera funcional que arranque sobre el Hardware usando GRUB como arranque y que escriba lo que recibe del teclado, xD)No prometo que esto avance mucho y tampoco prometo que se llegue, siquiera, a incluir un sistema de ventanas como lo es el de Windows 3.00a. Os dejo unas imagenes de la shell de comandos y del arranque:

Click para agrandar

No espero que opineis ni nada...

Esto es mas una practica que un proyecto, pero si todo sale bien esto seguirá adelante.

Actualizado Viernes 23 de Julio de 2010:

Primera version estable del Shell de comandos asi como del interprete de comandos.

Descarga: Descargar DarkSo Codename Aurora Rev 1020

Actualizado Jueves 10 de Octubre de 2010:

Nueva imagen del DarkSo, ahora contará con una barra superior que indicará en todo momento el estado de los discos duros y que pronto incluirá más informacion como el uso de CPU, RAM, etc.


4.55
Tu voto: Ninguno Votos totales: 4.6 (40 votos)

Anuncios Google

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Los IRQs...

Los irqs los sacastes de auqi no?

http://www.osdever.net/tutorials/view/irqs

Esque es practicamente lo mismo

Imagen de Almamu

¿A que te refieres? Los

¿A que te refieres? Los numeros de IRQ son siempre los mismos y en todos los sitemas operativos se habilitan/deshabilitan de forma parecida.


Perdona que te diga pero ese

Perdona que te diga pero ese codigo que posteo es el que posteastes tu mismo ;)

 

que es este: (casualidad que los 2 primeros comentarios están en español y es igual que el original pero con ciertos cambios)

;Codigo escrito por Almamu
;Prohibido su uso y/o la redeistribucion del mismo sin permiso alguno
global loader                          ; Make entry point visible to linker.
extern main                            ; _main is defined elsewhere
 
; setting up the Multiboot header - see GRUB docs for details
MODULEALIGN equ  1<<0             ; align loaded modules on page boundaries
MEMINFO     equ  1<<1             ; provide memory map
FLAGS       equ  MODULEALIGN | MEMINFO  ; this is the Multiboot 'flag' field
MAGIC       equ    0x1BADB002     ; 'magic number' lets bootloader find the header
CHECKSUM    equ -(MAGIC + FLAGS)  ; checksum required
 
; This is the virtual base address of kernel space. It must be used to convert virtual
; addresses into physical addresses until paging is enabled. Note that this is not
; the virtual address where the kernel image itself is loaded -- just the amount that must
; be subtracted from a virtual address to get a physical address.
KERNEL_VIRTUAL_BASE equ 0xC0000000                  ; 3GB
KERNEL_PAGE_NUMBER equ (KERNEL_VIRTUAL_BASE >> 22)  ; Page directory index of kernel's 4MB PTE.
 
section .data
align 0x1000
BootPageDirectory:
    ; This page directory entry identity-maps the first 4MB of the 32-bit physical address space.
    ; All bits are clear except the following:
    ; bit 7: PS The kernel page is 4MB.
    ; bit 1: RW The kernel page is read/write.
    ; bit 0: P  The kernel page is present.
    ; This entry must be here -- otherwise the kernel will crash immediately after paging is
    ; enabled because it can't fetch the next instruction! It's ok to unmap this page later.
	dd (BootPageTable + 3 - KERNEL_VIRTUAL_BASE)
	times (KERNEL_PAGE_NUMBER - 1) dd 0                 ; Pages before kernel space.
KernelPage:
	dd (BootPageTable + 3 - KERNEL_VIRTUAL_BASE)
	times (1024 - KERNEL_PAGE_NUMBER - 2) dd 0  ; Pages after the kernel image.
	dd (BootPageDirectory + 3 - KERNEL_VIRTUAL_BASE)
BootPageTable:
	times (1024) dd 0
EndPageDirectory:
 
	magic dd 0
	multiboot dd 0
 
section .text
align 4
MultiBootHeader:
    dd MAGIC
    dd FLAGS
    dd CHECKSUM
 
; reserve initial kernel stack space -- that's 16k.
STACKSIZE equ 0x4000
 
loader:
 
	mov [magic - KERNEL_VIRTUAL_BASE], eax
	mov [multiboot - KERNEL_VIRTUAL_BASE], ebx
 
	xor ebx, ebx
	add ebx, 3
 
	mov ecx, (BootPageTable - KERNEL_VIRTUAL_BASE)
 
.1:
	mov [ecx], ebx
	add ecx, 4
	add ebx, 0x1000
	cmp ecx, (EndPageDirectory - KERNEL_VIRTUAL_BASE)
	jne .1
 
    ; NOTE: Until paging is set up, the code must be position-independent and use physical
    ; addresses, not virtual ones!
	mov ecx, (BootPageDirectory - KERNEL_VIRTUAL_BASE)
	mov cr3, ecx                                        ; Load Page Directory Base Register.
 
	mov ecx, cr0
	or ecx, 0x80000000                          ; Set PG bit in CR0 to enable paging.
	mov cr0, ecx
 
    ; Start fetching instructions in kernel space.
	lea ecx, [StartInHigherHalf]
	jmp ecx                                                     ; NOTE: Must be absolute jump!
 
StartInHigherHalf:
    ; Unmap the identity-mapped first 4MB of physical address space. It should not be needed
    ; anymore.
	mov dword [BootPageDirectory], 0
	invlpg [0]
 
    ; NOTE: From now on, paging should be enabled. The first 4MB of physical address space is
    ; mapped starting at KERNEL_VIRTUAL_BASE. Everything is linked to this address, so no more
    ; position-independent code or funny business with virtual-to-physical address translation
    ; should be necessary. We now have a higher-half kernel.
	mov esp, stack+STACKSIZE           ; set up the stack
	mov eax, [magic]
	push eax                           ; pass Multiboot magic number
 
    ; pass Multiboot info structure -- WARNING: This is a physical address and may not be
    ; in the first 4MB!
	mov ebx, [multiboot]
	push ebx
 
	call main                  ; call kernel proper
	cli
	hlt                          ; halt machine should kernel return
 
section .bss
align 32
stack:
   resb STACKSIZE      ; reserve 16k stack on a quadword boundary

y el original es este: (casualidad que es el mismo código)

global _loader                          ; Make entry point visible to linker.
extern _main                            ; _main is defined elsewhere
 
; setting up the Multiboot header - see GRUB docs for details
MODULEALIGN equ  1<<0             ; align loaded modules on page boundaries
MEMINFO     equ  1<<1             ; provide memory map
FLAGS       equ  MODULEALIGN | MEMINFO  ; this is the Multiboot 'flag' field
MAGIC       equ    0x1BADB002     ; 'magic number' lets bootloader find the header
CHECKSUM    equ -(MAGIC + FLAGS)  ; checksum required
 
; This is the virtual base address of kernel space. It must be used to convert virtual
; addresses into physical addresses until paging is enabled. Note that this is not
; the virtual address where the kernel image itself is loaded -- just the amount that must
; be subtracted from a virtual address to get a physical address.
KERNEL_VIRTUAL_BASE equ 0xC0000000                  ; 3GB
KERNEL_PAGE_NUMBER equ (KERNEL_VIRTUAL_BASE >> 22)  ; Page directory index of kernel's 4MB PTE.
 
 
section .data
align 0x1000
BootPageDirectory:
    ; This page directory entry identity-maps the first 4MB of the 32-bit physical address space.
    ; All bits are clear except the following:
    ; bit 7: PS The kernel page is 4MB.
    ; bit 1: RW The kernel page is read/write.
    ; bit 0: P  The kernel page is present.
    ; This entry must be here -- otherwise the kernel will crash immediately after paging is
    ; enabled because it can't fetch the next instruction! It's ok to unmap this page later.
    dd 0x00000083
    times (KERNEL_PAGE_NUMBER - 1) dd 0                 ; Pages before kernel space.
    ; This page directory entry defines a 4MB page containing the kernel.
    dd 0x00000083
    times (1024 - KERNEL_PAGE_NUMBER - 1) dd 0  ; Pages after the kernel image.
 
 
section .text
align 4
MultiBootHeader:
    dd MAGIC
    dd FLAGS
    dd CHECKSUM
 
; reserve initial kernel stack space -- that's 16k.
STACKSIZE equ 0x4000
 
_loader:
    ; NOTE: Until paging is set up, the code must be position-independent and use physical
    ; addresses, not virtual ones!
    mov ecx, (BootPageDirectory - KERNEL_VIRTUAL_BASE)
    mov cr3, ecx                                        ; Load Page Directory Base Register.
 
    mov ecx, cr4
    or ecx, 0x00000010                          ; Set PSE bit in CR4 to enable 4MB pages.
    mov cr4, ecx
 
    mov ecx, cr0
    or ecx, 0x80000000                          ; Set PG bit in CR0 to enable paging.
    mov cr0, ecx
 
    ; Start fetching instructions in kernel space.
    lea ecx, [StartInHigherHalf]
    jmp ecx                                                     ; NOTE: Must be absolute jump!
 
StartInHigherHalf:
    ; Unmap the identity-mapped first 4MB of physical address space. It should not be needed
    ; anymore.
    mov dword [BootPageDirectory], 0
    invlpg [0]
 
    ; NOTE: From now on, paging should be enabled. The first 4MB of physical address space is
    ; mapped starting at KERNEL_VIRTUAL_BASE. Everything is linked to this address, so no more
    ; position-independent code or funny business with virtual-to-physical address translation
    ; should be necessary. We now have a higher-half kernel.
    mov esp, stack+STACKSIZE           ; set up the stack
    push eax                           ; pass Multiboot magic number
 
    ; pass Multiboot info structure -- WARNING: This is a physical address and may not be
    ; in the first 4MB!
    push ebx
 
    call  _main                  ; call kernel proper
    hlt                          ; halt machine should kernel return
 
 
section .bss
align 32
stack:
    resb STACKSIZE      ; reserve 16k stack on a quadword boundary

 

no me vengas con que no se tal y cual, me da igual lo que sepas o lo que no y no te importa mis conocimientos o los que no tenga, aqui lo que huele es mal de que alguien se apodera del trabajo de otro, cosa que no soporto.

Imagen de Almamu

Ese codigo que dices NO está

Ese codigo que dices NO está en mi trabajo, ya te enseñé que codigo está en mi kernel, simplemente la cabecera se me colo porque en principio pensé en mostrar un codigo de booteo muy parecido al que tengo en mi kernel, con el Magic Structure del GRUB en un include y con los irqs iniciados y tal. Pero seguro que eso ati no te importa por el simple echo de que vas a desprestigiar y nada más.

El codigo de mi kernel ESTÁ ESCRITO por mi, he recibido ayuda en el foro de osdev.org(pagina web que tu citas)pero no me he leido sus tutoriales, solo la documentación. Deja ya de molestar que yo no te he echo nada a tí para que me ataques así. Si quieres seguir creyendo lo que tu mismo dices adelante, eres libre, pero cuando te des cuenta de lo equivocado que estabas no creo que el DarkSo sea ni una sola linea de lo que es ahora.


Simplemente no es por joder,

Simplemente no es por joder, es que ya vi eso en osdev, posteaste ese mismo code pero con varios cambios y los 2 primeros comentarios en español, fue eso lo que me sorprendió, posteaste ese code en los comentarios y decias que era tuyo con los comentarios en inglés.

 

Simplemente eso, soy una persona que le gusta el conocimiento libre pero datando autores, si me equivoco perdón.

Imagen de Almamu

En parte el error fue mio

En parte el error fue mio porque al principio no me acorde del codigo de más abajo, nada más.

Deacuerdo, entonces

Deacuerdo, entonces solucionado.

Suerte con el proyecto, espero ver avances pronto, saludos.

Imagen de Almamu

Actualizada la imagen con el

Actualizada la imagen con el estado del SO, en estos momentos estoy programando el soporte para discos duros, por el momento solo detecta los discos duros presentes pero en unos dias y cuando solucione unos problemas con las maquinas virtuales, soportará el leer y escribir en FAT16(calculo que en 2 semanas o así lo tendré listo).


Por favor...

Por favor... pongamos la fuente...

 

http://wiki.osdev.org/Higher_Half_bare_bones

 

por si algun dia lo liberas... lol

Imagen de Almamu

Haz el favor que antes de

Haz el favor que antes de hablar leeas el link que posteas, porque el código es escrito por MÍ, la información de arranque del GRUB la encontre buscando documentación por google y todo codigo está escrito por MÍ.


esto es tuyo¿?¿? por

esto es tuyo¿?¿? por favor...

 

;Codigo escrito por Almamu
;Prohibido su uso y/o la redeistribucion del mismo sin permiso alguno
global loader                          ; Make entry point visible to linker.
extern main                            ; _main is defined elsewhere
 
; setting up the Multiboot header - see GRUB docs for details
MODULEALIGN equ  1<<0             ; align loaded modules on page boundaries
MEMINFO     equ  1<<1             ; provide memory map
FLAGS       equ  MODULEALIGN | MEMINFO  ; this is the Multiboot 'flag' field
MAGIC       equ    0x1BADB002     ; 'magic number' lets bootloader find the header
CHECKSUM    equ -(MAGIC + FLAGS)  ; checksum required
 
; This is the virtual base address of kernel space. It must be used to convert virtual
; addresses into physical addresses until paging is enabled. Note that this is not
; the virtual address where the kernel image itself is loaded -- just the amount that must
; be subtracted from a virtual address to get a physical address.
KERNEL_VIRTUAL_BASE equ 0xC0000000                  ; 3GB
KERNEL_PAGE_NUMBER equ (KERNEL_VIRTUAL_BASE >> 22)  ; Page directory index of kernel's 4MB PTE.
 
section .data
align 0x1000
BootPageDirectory:
    ; This page directory entry identity-maps the first 4MB of the 32-bit physical address space.
    ; All bits are clear except the following:
    ; bit 7: PS The kernel page is 4MB.
    ; bit 1: RW The kernel page is read/write.
    ; bit 0: P  The kernel page is present.
    ; This entry must be here -- otherwise the kernel will crash immediately after paging is
    ; enabled because it can't fetch the next instruction! It's ok to unmap this page later.
	dd (BootPageTable + 3 - KERNEL_VIRTUAL_BASE)
	times (KERNEL_PAGE_NUMBER - 1) dd 0                 ; Pages before kernel space.
KernelPage:
	dd (BootPageTable + 3 - KERNEL_VIRTUAL_BASE)
	times (1024 - KERNEL_PAGE_NUMBER - 2) dd 0  ; Pages after the kernel image.
	dd (BootPageDirectory + 3 - KERNEL_VIRTUAL_BASE)
BootPageTable:
	times (1024) dd 0
EndPageDirectory:
 
	magic dd 0
	multiboot dd 0
 
section .text
align 4
MultiBootHeader:
    dd MAGIC
    dd FLAGS
    dd CHECKSUM
 
; reserve initial kernel stack space -- that's 16k.
STACKSIZE equ 0x4000
 
loader:
 
	mov [magic - KERNEL_VIRTUAL_BASE], eax
	mov [multiboot - KERNEL_VIRTUAL_BASE], ebx
 
	xor ebx, ebx
	add ebx, 3
 
	mov ecx, (BootPageTable - KERNEL_VIRTUAL_BASE)
 
.1:
	mov [ecx], ebx
	add ecx, 4
	add ebx, 0x1000
	cmp ecx, (EndPageDirectory - KERNEL_VIRTUAL_BASE)
	jne .1
 
    ; NOTE: Until paging is set up, the code must be position-independent and use physical
    ; addresses, not virtual ones!
	mov ecx, (BootPageDirectory - KERNEL_VIRTUAL_BASE)
	mov cr3, ecx                                        ; Load Page Directory Base Register.
 
	mov ecx, cr0
	or ecx, 0x80000000                          ; Set PG bit in CR0 to enable paging.
	mov cr0, ecx
 
    ; Start fetching instructions in kernel space.
	lea ecx, [StartInHigherHalf]
	jmp ecx                                                     ; NOTE: Must be absolute jump!
 
StartInHigherHalf:
    ; Unmap the identity-mapped first 4MB of physical address space. It should not be needed
    ; anymore.
	mov dword [BootPageDirectory], 0
	invlpg [0]
 
    ; NOTE: From now on, paging should be enabled. The first 4MB of physical address space is
    ; mapped starting at KERNEL_VIRTUAL_BASE. Everything is linked to this address, so no more
    ; position-independent code or funny business with virtual-to-physical address translation
    ; should be necessary. We now have a higher-half kernel.
	mov esp, stack+STACKSIZE           ; set up the stack
	mov eax, [magic]
	push eax                           ; pass Multiboot magic number
 
    ; pass Multiboot info structure -- WARNING: This is a physical address and may not be
    ; in the first 4MB!
	mov ebx, [multiboot]
	push ebx
 
	call main                  ; call kernel proper
	cli
	hlt                          ; halt machine should kernel return
 
section .bss
align 32
stack:
   resb STACKSIZE      ; reserve 16k stack on a quadword boundary

 

;)

Imagen de Almamu

Pues ese codigo que tu

Pues ese codigo que tu publicas no se parece casi en nada(solo por la estructura magica y la tengo en un .inc aparte). concretamente tengo esto:

%include "include/grub.inc"
 
[BITS 16]
 
[global start]
[extern kmain] ; en kernel.c
[extern _lidt]
 
start:
	CLI
	LGDT [_lidt]
	MOV EAX, CR0
	OR AL, 1
	MOV CR0, EAX
 
	JMP 08h:kmain
 
  jmp $ ; si retorna de kmain se detiene

Pero claro, no lo intentes usar porque como no tienes ni P*** idea de como programar el IDT ni el GDT ni los IRQ¬¬. Dejad ya de tratar de chafarme, que por mucho que lo trates aqui esta todo escrito por mi y deja de dar por culo.

COMPARA CODIGOS:

El de mi tutorial:

global _loader		; esto es para el linkeo
global eokl		; punto final del kernel
extern k_main
 
; setting up the Multiboot header - see GRUB docs for details
 no tocar, es para que arranque el GRUB
MODULEALIGN equ  1<<0                   ; align loaded modules on page boundaries
MEMINFO     equ  1<<1                   ; provide memory map
FLAGS       equ  MODULEALIGN | MEMINFO  ; this is the Multiboot 'flag' field
MAGIC       equ    0x1BADB002           ; 'magic number' lets bootloader find the header
CHECKSUM    equ -(MAGIC + FLAGS)        ; checksum required
 
section .text
align 4
MultiBootHeader:
	dd MAGIC
	dd FLAGS
	dd CHECKSUM
 
	; reservar stack
	STACKSIZE equ 0x4000		; 16k
	_loader:
	mov esp, stack+STACKSIZE; set up the stack
	push eax		; pasamos Multiboot Magick Number
	push ebx		; pasamos Multiboot Info Structure
	call k_main
	hlt
 
eokl	dd STACKSIZE + stack
	section .bss
	align 32
	stack:
	resb STACKSIZE		; reservar 16k de stack en una quadword

con el tuyo, no se parecen mas que en la estructura magica del grub.

El que tu posteas es simplemente la entrada del kernel y la paginacion de RAM y es el que en un principio era el prototipo del actual, pero como ves ni se parecen. Seguro que tu ni siquiera sabes inciar el modo protegido ¬¬.


Imagen de LuisxD

Fuente?

Pero si el post es sobre el kernel que el creo, no sobre como lo hizo ni el codigo ni nah.

Muy bueno almamu, esperemos en un futuro no muy lejano Almamu Profesional SP 3.. (heh..)

 

Salu2~


Imagen de Almamu

Como mucho un DarkDos, xD

Como mucho un DarkDos, xD

Imagen de joserc87

Sistema de ventanas? xD. No

Sistema de ventanas? xD. No es por desanimar, pero lo veo imposible, más que nada porque para esto tienes que tener todo un kernel por debajo, (habiendo implementado capa de abstracción hardware entera a mano, gestión de memoria, gestión de ficheros, carga de programas, tooodas las interrupciones y un laaaargo etc, para luego hacer una especie de servidor X rudimentario). Por otra parte, la primera versión de MS-DOS (QDOS) la programó un solo hombre (eso sí, era un clon de CP/M, así que tenía donde fijarse).

En fín, ánimo, que por lo menos vas a aprender mogollón con lo que consigas hacer.


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de Almamu

Nada es imposible, realmente,

Nada es imposible, realmente, para la gestion de ficheros solo necesitas leer y escribir en el disco duro y tener nociones de los sistemas de archivos más usados, en un principio estoy tratando de preparar el soporte para los IDE por PIO para preparar un sistema en FAT16. En realidad, lo más dificil que he visto en la programacion es la grafica(modo VM86, es algo bastante complicado según he visto, solo para el modo vesa ya hay tela...). De todas formas conozco gente que en 2 años o así ha conseguido preparar un entorno de ventanas más que decente con un kernel funcional al 100%, lo dicho, solo se necesita dedicación.


Imagen de joserc87

Bueno, tampoco es solo leer y

Bueno, tampoco es solo leer y escribir del disco duro directamente, tienes que gestionar toda la partición (inodos y toda la historia), que se puede, pero es largo de hacer. Lo que me refería sobre todo es que hacer un SO implica implementar TODAS las llamadas al sistema. Es mucho trabajo, pero supongo que en 2 años puedes tener algo.

Una pregunta: por qué FAT16 y no FAT32 diréctamente, si tiene que ser casi igual de programar? (o incluso ya que te pones, lo puedes hacer de 64bits).


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

con un solo programador no se puede hacer maravillas

un solo programador no puede hacer gran cosa pero con un buen equipo de programadores se puede llegar a hacer algo. es muy muy dificil programar un sistema operativo. creo que seria mas interesante hacer un sistema alternativo al de sony para psp si eso pudiera hacerse. si buscas un gran equipo de programadores motivados podrias llegar lejos.

Imagen de Guillermo_Cornielle

Como dije

Esto es un gran avance y eso que lo tenias mal catalogado xDDD...la verdad me gustaría saber donde aprendiste a hacer eso xDDD... este proyecto tiene futuro no lo dejes atras...solo pegale empeño.

Saludos figura!


Manual del Perfecto Votante Para un voto libre y justo!.

TheGCProjects

Imagen de Almamu

La verdad esque empece con un

La verdad esque empece con un simple tutorial de como empezar el kernel, el codigo se quedaba asi:

start.asm:

global _loader
extern k_main
 
_loader:
     call k_main;Vamos al archivo C
     cli
     hlt

kernel.c:

k_main(){
     (char *)vidmem = (char *)0xb7000;//Esta creo que no es exactamente la memoria de las letras, pero bueno, para el ejemplo vale
     vidmem[2] = "h";//escribo una letra
     vidmem[3] = 0x07;//Color blanco
     while(1);//paro el SO, xD
}

La verdad es que para arrancar eso necesitabas una .img de diskete booteable a ese archivo y era un poco lioso a veces, asi que me decante por grub, leí un poco de documentaicón y al final saque el arranque, xD.


Imagen de Guillermo_Cornielle

Jajaa

Tu lo haces parecer tan fácil cuando en vdd es bien difícil xDD

Imagen de moikop

XD

Eso, ahora que lo veo "detenidamente", no es complicado. Lo que debe ser complicado es bootear la PC y controlar el teclado XDDD

Imagen de Almamu

Eso es un auntentico

Eso es un auntentico suplicio, sobre todo programar los interruptores para que se reciban las pulsaciones del teclado y luego pasarlas a letras... ahora solo queda que consiga hacer soporte para HDD...


Imagen de P22

Off topic

Una pregunta un poco fuera de tema.. (nadie te obliga a contestar) cuantos años tienes y cuantos llevas programando?

Es para saber si podré alcanzarte algñún día o me queda todavía tiempo xD

Si la pregunta te parece un poco comprometedora... Siempre puedes responderme por MP :P

Un saludo y suerte con tu proyecto


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Imagen de Almamu

Tengo 15 años y llevo como 3

Tengo 15 años y llevo como 3 años en C y como 4 años en GML, aunque haya sido en DS es casi lo mismo(solo que no tengo librerias para los graficos aun, xD, tengo que programarla yo mismo...)


Imagen de P22

WTF!!

Me queda solo 1 año para alcanzarte!!!

Bueno, eso mirando la edad, pero mirando lo de C todavía tengo 2 años y medio jejejeje

No puedes usar SDL?


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Imagen de Almamu

Segun he visto no, porque

Segun he visto no, porque para SDL primero necesito tener el driver grafico programado y listo para luego hacer un port de la librerçia, aunque no lo he mirado muy a fondo, de todas formas hace falta muchas funciones de C que aun no tengo...


Imagen de Silv3r X

Realmente impresionante

Esto desde luego es lo mejor en programacion que veo por scenebeta, es tener fe en poder lograr algo. Llegara a ser un sistema operativo? Puede que tardes mucho en terminarlo (o no terminarlo) pero seguro que sera el mejor sistema. :D


Echo de menos ser parte del staff activo de SB. Llora

Chat no oficial de Scenebeta.

Imagen de Almamu

No creo que llegue ni

No creo que llegue ni siquiera a la suela de Win bugs, y alcanzar linux, ni de coña(o eso creo)es mas bien un microkernel con un solo proceso a la vez... ademas de momento no lee ni el disco duro, solo la shell y poco mas, ademas con esto no puedo entrar al Scenery, xD.


Imagen de iRVing_Prog

como lo ha dicho

 P22, es el sueño de todo newbie en programación(me incluyo) ;), esperamos siga y se convierta en un buen proyecto.

Un saludo y felicidades.!


 

Imagen de Almamu

Mas bien es un deseo

Mas bien es un deseo terminarlo almenos como un MSDOS y luego ya programar encima de el a ver que tal van las cosas, xD.

Imagen de iRVing_Prog

viéndolo desde el punto

que ya lo has hecho, obvio que quieres avanzar, y en ese momento es tu "sueño", desde el punto de los que no.... lo siguiendo siendo :D


 

Imagen de Tanos

Excelente

A ver si pronto tenemos algún tutorial: "Cómo crear tu propio SO" xD (es broma :P).

Se ve muy bien, excelenete, y eso, el lenguaje de ensamblador está lejos de mi alcance xD.

Imagen de Almamu

En realidad yo uso poco ASM

En realidad yo uso poco ASM en el kernel(lo justo para las tablas gdt, idt y los irq, el manejador de excepciones y poco mas, parte en C y otra en ASM), pero eso si, debes de tener mucha documentacion y saber programar las funciones standard de C, porque si no vas de cabeza al hoyo, xD.


Imagen de Almamu

He subido la ultima revision

He subido la ultima revision que tengo, no quiero que piensen que lleva soporte para FAT ni nada, es una simple Shell de comandos con varios comandos para probar cualquier bug que encuentren en ella, nada mas.

El archivo descomprimido es un archivo .img(una imagen de diskette)lista para ser grabada o bien para ser emulada en VirtualBox, desconozco si funciona en otros...


Imagen de P22

O.o

Qué máquina!!! Eso que estás haciendo es mi sueño :-O

Y cómo se supone que es el ensamblador? según tengo entendido es código hexadecimal... Es muy dificili?

 


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Imagen de Almamu

Me parece que eso de codigo

Me parece que eso de codigo hexadecimal es segun el compilador... El codigo ensamblador se ve tal que así:

;Codigo escrito por Almamu
;Prohibido su uso y/o la redeistribucion del mismo sin permiso alguno
global loader                          ; Make entry point visible to linker.
extern main                            ; _main is defined elsewhere
 
; setting up the Multiboot header - see GRUB docs for details
MODULEALIGN equ  1<<0             ; align loaded modules on page boundaries
MEMINFO     equ  1<<1             ; provide memory map
FLAGS       equ  MODULEALIGN | MEMINFO  ; this is the Multiboot 'flag' field
MAGIC       equ    0x1BADB002     ; 'magic number' lets bootloader find the header
CHECKSUM    equ -(MAGIC + FLAGS)  ; checksum required
 
; This is the virtual base address of kernel space. It must be used to convert virtual
; addresses into physical addresses until paging is enabled. Note that this is not
; the virtual address where the kernel image itself is loaded -- just the amount that must
; be subtracted from a virtual address to get a physical address.
KERNEL_VIRTUAL_BASE equ 0xC0000000                  ; 3GB
KERNEL_PAGE_NUMBER equ (KERNEL_VIRTUAL_BASE >> 22)  ; Page directory index of kernel's 4MB PTE.
 
section .data
align 0x1000
BootPageDirectory:
    ; This page directory entry identity-maps the first 4MB of the 32-bit physical address space.
    ; All bits are clear except the following:
    ; bit 7: PS The kernel page is 4MB.
    ; bit 1: RW The kernel page is read/write.
    ; bit 0: P  The kernel page is present.
    ; This entry must be here -- otherwise the kernel will crash immediately after paging is
    ; enabled because it can't fetch the next instruction! It's ok to unmap this page later.
	dd (BootPageTable + 3 - KERNEL_VIRTUAL_BASE)
	times (KERNEL_PAGE_NUMBER - 1) dd 0                 ; Pages before kernel space.
KernelPage:
	dd (BootPageTable + 3 - KERNEL_VIRTUAL_BASE)
	times (1024 - KERNEL_PAGE_NUMBER - 2) dd 0  ; Pages after the kernel image.
	dd (BootPageDirectory + 3 - KERNEL_VIRTUAL_BASE)
BootPageTable:
	times (1024) dd 0
EndPageDirectory:
 
	magic dd 0
	multiboot dd 0
 
section .text
align 4
MultiBootHeader:
    dd MAGIC
    dd FLAGS
    dd CHECKSUM
 
; reserve initial kernel stack space -- that's 16k.
STACKSIZE equ 0x4000
 
loader:
 
	mov [magic - KERNEL_VIRTUAL_BASE], eax
	mov [multiboot - KERNEL_VIRTUAL_BASE], ebx
 
	xor ebx, ebx
	add ebx, 3
 
	mov ecx, (BootPageTable - KERNEL_VIRTUAL_BASE)
 
.1:
	mov [ecx], ebx
	add ecx, 4
	add ebx, 0x1000
	cmp ecx, (EndPageDirectory - KERNEL_VIRTUAL_BASE)
	jne .1
 
    ; NOTE: Until paging is set up, the code must be position-independent and use physical
    ; addresses, not virtual ones!
	mov ecx, (BootPageDirectory - KERNEL_VIRTUAL_BASE)
	mov cr3, ecx                                        ; Load Page Directory Base Register.
 
	mov ecx, cr0
	or ecx, 0x80000000                          ; Set PG bit in CR0 to enable paging.
	mov cr0, ecx
 
    ; Start fetching instructions in kernel space.
	lea ecx, [StartInHigherHalf]
	jmp ecx                                                     ; NOTE: Must be absolute jump!
 
StartInHigherHalf:
    ; Unmap the identity-mapped first 4MB of physical address space. It should not be needed
    ; anymore.
	mov dword [BootPageDirectory], 0
	invlpg [0]
 
    ; NOTE: From now on, paging should be enabled. The first 4MB of physical address space is
    ; mapped starting at KERNEL_VIRTUAL_BASE. Everything is linked to this address, so no more
    ; position-independent code or funny business with virtual-to-physical address translation
    ; should be necessary. We now have a higher-half kernel.
	mov esp, stack+STACKSIZE           ; set up the stack
	mov eax, [magic]
	push eax                           ; pass Multiboot magic number
 
    ; pass Multiboot info structure -- WARNING: This is a physical address and may not be
    ; in the first 4MB!
	mov ebx, [multiboot]
	push ebx
 
	call main                  ; call kernel proper
	cli
	hlt                          ; halt machine should kernel return
 
section .bss
align 32
stack:
   resb STACKSIZE      ; reserve 16k stack on a quadword boundary

Lo pongo mas que nada en ingles todo por si libero la source algun dia(que eso espero).


Imagen de Miquel Carol

Detalle tonto. ;)

Si pretendes liberar algun dia el codigo, yo te pediria por favor. Que las notas en el codigo las hagas en ingles. Siempre te lo agradecera cualquier coder de habla no hispana que asi lo hagas.

Por lo demas como metodo de experimentacion (que por lo que he leido es la impresion que me da que llevas) me parece muy interesante. Antaño era habitual (en los 80 y 90) a dia de hoy la gente que se pelea con el asembler esta en extincion. ;)

No se porque pero es asi, los programadores de "bajo nivel" (lean en la wikipedia los no entendidos, que para nada es para principantes) son menos conocidos que los "desarrolladores de librerias", a los que enseguida se deifica si saca algun soft q permita cargar copias ilicitas. Tenemos claros ejemplos que no nombrare, en estos ultimos años de la Scene.


Imagen de Almamu

Normalmente suelo comentarlo

Normalmente suelo comentarlo todo en ingles, pero hay partes, mientras las estoy desarrollando, que las escribo en español para acelerarlo todo, luego los paso a ingles.


Imagen de Miquel Carol

Es cuestion de coger buenas costumbres

Yo empece como tu,

Y al final llegue a la conclusion de que si me acostumbraba a poner directamente en ingles me ahorraba tiempo y dolores de cabeza a la hora de revisar el codigo para hacerlo. ;)

Ahora me echan la bulla cuando facilito algo de codigo porque comento en ingles. (of course solo me echan la bulla los hispanoparlantes) xDDDDDD


Imagen de Almamu

Bueno, de todas formas ahora

Bueno, de todas formas ahora mismo el codigo tiene todos los comentarios en ingles, xD.

Imagen de P22

Vaya

no parece muy dificil, pero seguro que lo es...

http://es.wikipedia.org/wiki/Lenguaje_ensamblador

Si ves la imagen de la derecha, salen un monton de numeros


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Imagen de Almamu

Fijate bien en la imagen: En

Fijate bien en la imagen:

En rojo es el lenguaje máquina(si, los codigos exadecimales de arriba y los de abajo). El morado es el codigo Ensamblador, hay una diferencia, el ensamblador es realmente una especie de simplificacion del lenguaje maquina(sin quitarle complejidad para nada, xD)que hace mas entendible el codigo al ojo humano, porque a simple vista el de rojo no se entiende nada(xD)pero, en el morado si que se entiende algo:

mov dx, 010B

copia lo que hay en 010B(que si no me equivoco es el inicio del texto) al registro dx, luego se escribe en pantalla con esas instrucciones que ves despues del mov dx, 010B.(Creo que no la he cagado en la explicacion, xD)

Si no me equivoco esto es algo asi:

B = instruccion mov

A = dx

4 = ah

cd = int

Aunque tampoco estoy muy seguro de esto, solo he tocado en ensamblador, no el maquina.


Imagen de victor141516

Muuuucho mas claro

Jue, es que esta muuucho mas claro en ensamblador, donde va a parar, si yo en cuanto me levanto por la mañana lo primero que pienso es: MOV VASO,LECHE. Ya se por que era xD


 

 

"El pueblo no debería temer a sus gobernantes, son los gobernantes los que deberían de temer al pueblo"

Imagen de Almamu

Hombre yo me pensaba que era

Hombre yo me pensaba que era al reves, que se movia el primero al segundo, asi que fiajte tu, xD.

Imagen de victor141516

Yo tambien

Pero en el comentario anterior los has puesto al reves :P

De todas formas cada uno se hace el desayuno como quiere xD

Imagen de Almamu

en asm es asi, xD mov vaso,

en asm es asi, xD

mov vaso, leche seria igual a mover leche al vaso, xDDDDDDDDDDD

 

Imagen de P22

O.o

Me sigue pareciendo incomprensible... xD

Vamos, la explicación de l morado si que me he enterado mas o menos, pero lo de luego de B, A, 4, cd de donde lo has sacado?? xD

Bueno, tampoco hace falta que me lo expliques, que no me voy a enterar de mucho... :P

Bueno, tu sigue así, que acabarás bien. Si necesitases ayudantes yo estaría dispuesto a ello para C y C++


¡Iníciate en Linux fácilmente! Sólo entra aquí y comprueba que distribución se adapta mejor a tí.

Mi review: iPod Touch 4G

Imagen de Almamu

Si te fijas los codigos

Si te fijas los codigos hexadecimales son esas mismas lineas, si te fijas en los argumentos que tiene te das cuenta de lo que es cada cosa...


Imagen de Guillermo_Cornielle

Se que no esperas nada

Pero la verdad es un buen avance....valga la redundancia xDDD....Suerte

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.