Cualquier problema no dudes en preguntar, hace muy poco estuve haciendo uno para jugar un poquito (solo arrancaba mostraba un mensaje, esperaba una tecla y reiniciaba la maquina).Si si si yo me acuerdo, yo me acuerdo incluso lo tengo guardadito jejeje y esta super!!!!
:smartass:
Te agradezco bastante la atención brindada eternal idol creo que por el momento investigare un poquito mas para empezar a programarDe nadas y me parece muy bien que sigas investigando, cualquier problema estaremos aca para ayudar siempre que podamos :devil:
Eternal, me parecio interesante el comentario que has hecho, te enojas si te pido el codigo para verlo?... solo es una consulta :) .. estoy buscando info al respecto para ver si logro hacer algo similar. Saludos y Gracias de antemano :)¿Como me va a molestar? Para nada, solo me jode un poco que me digas "has hecho" en vez de hiciste :D
aca hay algo que hice hace un tiempo como una broma con un amigo.Muy interesante realmente, mi PC no tiene diskettera pero para algo esta Virtual PC (o VMWARE en su defecto).
habiamos teniado la idea de un sistema operativo llamado diOS y quedo todo en la ruina, les paso el codigo fuente con unos bat que creo que lo construyen y lo copian a un disquete, despues de eso reinicien con el disquete puesto y veran algo simple pero que ayuda un poco.
espero comentarios
si no funciona o falta algo avisen
Eternal o el que sepa... tengo una duda, me podrian decir por fa que hace esto:En sintesis eso resetea la PC.Código: Text
reset equ DB 0EAh, 0h, 0h, 0FFh, 0FFh
:lol: en sintesis eso lo seCita de: "JuanK"Eternal o el que sepa... tengo una duda, me podrian decir por fa que hace esto:En sintesis eso resetea la PC.Código: Text
reset equ DB 0EAh, 0h, 0h, 0FFh, 0FFh
:lol: en sintesis eso lo seSon bytes que representan un jmp FFFF:0000, la direccion de memoria donde la CPU carga la BIOS. Al hacer un salto ahi es como si la PC volviera a arrancar.
lo que quiero saber es que hace puntualmente.
reset equ DB 0EAh, 0h, 0h, 0FFh, 0FFh
Si, le asigna un valor a un identificador que despues reemplazara el preprocesador.Citarreset equ DB 0EAh, 0h, 0h, 0FFh, 0FFh
ya veo equ asigna el opcode del jmp y los 'parametros' a reset
es como un define en C verdad?
pero es dependiente del ensamblador que se usa o todos los ensambladores soportan esa 'directiva', es decir lo puedio usar en nasm , tasm? o en todos ?La respuesta a esta pregunta esta implicita en mi anterior mensaje, el que hace el reemplazo es el preprocesador. Por lo tanto la sintaxis es de MASM, creo que TASM la soporta pero no es algo de assembly.
eternal de hecho el halt lo unico que hace es bloquear el micro no apagar la pc, lo que se apaga es el micro, faltaria un "ahora puede apagar el pc", a diOS lo deje de programar porque cuando estraba escribiendo el manejador de la disquetera habia una cosa que no funcionaba por eso pare, pero no es dificil de retomar.Efectivamente, despues vi el codigo :comp:
por lo del tutorial con mucho gusto si de algo sirve mi aporte..
sobre la instruccion de reseteo es una intruccion que soporta cualquier assembler creo que en nasm la instruccion esa es la misma, es una constante lo que se asigna.
es lo mismo hacer
reset:
jmp ffff:0000
; no hace falta ret porque no vueleve nunca
y despues
call reset
por un solocodigOS jajaj
Mil GRacias Eternal Idol, jeje :lol: .. algo reformado mi Argentino pero igual se entiende che ;) :D ..Cita de: "© Jonathan ©"Eternal, me parecio interesante el comentario que has hecho, te enojas si te pido el codigo para verlo?... solo es una consulta :) .. estoy buscando info al respecto para ver si logro hacer algo similar. Saludos y Gracias de antemano :)¿Como me va a molestar? Para nada, solo me jode un poco que me digas "has hecho" en vez de hiciste :D
Estoy pensando en hacer un mini tutorial al respecto ya que veo a bastantes personas interesadas en este tema. Se podria poner un poco de teoria, desarrollar el loader y explicar como lograr probarlo. :devil:
Aclaro que no soy un experto ni mucho menos en la materia, ni siquiera me gusta programar en 16 bits :whistling:
De cualquier manera aca tenes el codigo, NO REVISADO NI COMENTADO:Código: Text
.186 .model tiny Codigo segment 'code' reset equ DB 0EAh, 0h, 0h, 0FFh, 0FFh IFDEF LOADER org 07C00h ELSEIFNDEF org 0100h ENDIF main: IFDEF LOADER mov ax, 0FFFFh mov ds, ax ENDIF mov ax, cs mov ds, ax mov si, offset msg call prints call getchar IFDEF LOADER reset ELSEIFNDEF call exit ENDIF exit : mov ah, 4Ch int 21h putchar: pusha mov ah, 0Eh xor bh, bh int 10h popa ret prints: prints_bucle: lodsb cmp al, 0 jz prints_fin call putchar jmp prints_bucle prints_fin: ret getchar: xor ah, ah int 16h ret msg db "Presione una tecla para continuar", 0 Codigo ends End Main
Mil GRacias Eternal Idol, jeje :lol: .. algo reformado mi Argentino pero igual se entiende che ;) :D ..MenuetOS, un clasico, en un misero diskette tiene hasta GUI! Creo que estaba hecho con FASM. Lograr un MenuetOS es bastante complejo, se necesita tiempo y dedicacion pero si somos suficientes y con ganas se puede.
Me quiero anotar para lo que tienen pensado hacer, quisiera participar y mas que nada aprender el ASM.. no se si han visto el OS Menuet, elaborado en ASM 32bits si no me equivoco :ph34r: ... lo probe y esta muy bueno, podriamos lograr algo como eso?.. he visto que no hay proyectos emprendidos por personas de habla hispana en toda internet, culpa de eso todos los documentos de sistemas operativos estan en ingles :( .. aver si se anotan mas usuarios y comenzamos con algo simple como para ver que sale.
Bob, probe tu codigo y me hizo llorar de risa, esta muy bueno, con que compilador trabajas?.. me interesaria aprender al maximo todo esto!.. Un Abrazo para todos y comiencen algo que se ta poniendo buenisimo! jeje :comp: :devil: :D
He leido sus post, y se escucha muy interesante lo del SO, me gustaria participar pero realmente soy nuevo en esto de ensamblador, ahora trato de hacer un SO para un trabajo de la universidad, pero debido a sus comentarios he quedado con una duda ¿que diferencia hay entre TASM, NASM y FASM?, cual es mejor, cual debo usar?.TASM olvidalo, es el pasado.
si llegamos a empezar el proyecto la eleccion yo la haria entre NASM y FASM por cierto.
Retomando lo de menuet OS..MenuetOS es un Sistema Operativo sin lugar a la menor duda:
creo que seria un mal horizonte para el proyecto, ya que menuet puede tener muchas cosas buenas a nivel de programacion y que seguro merecen un reconocimiento pero en mi opinion no tiene nada de sistema operativo aunque cuente con cosas que lo hagan ver asi.
Menuet en efecto fue desarrollado totalmente en asm, lo cual aunque parezca heroico es una trampa mortal para el desarrollo progresivo de un sistema operativo ya que cualquier mejora que se haga en codigo incluso para hacerlo portable de una maquina a otra o para modificarlo y hacerlo compatible con nuevas funcionalidades de los procesadores... termina siendo una tarea bastante dispendiosa y costosa.
Solo deberia ser desarrollado en ensamblador una parte muy pequeña del nucleo que seria la que implementaria una especie de RTL y otras funcionalidades básicas y la cual podriamos llamar una HLA.
Una alternativa para no desarrollar un sistema en ensamblador es lógicamente desarrollarlo en algún lenguaje de programacin de más alto nivel... seguramente lenguaje C y despues C++, pero esto implica tener un compilador lo cual facilita mucho el asunto ya que si se necesita generar un ensamblado con caracteristicas diferentes o que genere código de maquina de una manera diferente pues simplemente se cambian los parametros del compilador , se recompila y ya.
Alli surge otro problema y es que solo hay dos opciones:
1- Crear un compilador nativo para el sistema operativo
2- Usar un compilador que ya este hecho en otra plataforma y
adecuar el sistema para interpretar ese ejecutable
La primera es la opcion más optima creo yo o al menos seria la que mas me gustaria, pero demanda muchisimo más tiempo ya que la sola creacion de un MUY BUEN compilador podria tomar años, la segunda es más rápida pero implica desarrollar de acuerdo a un estandart ya establecido, es decir si se decide usar el GCC habria que ir pensando en desarrollar el conjunto de llamdas del estandart POSIX.
- Pre-emptive multitasking, multithreading, ring-3 protection
- Responsive GUI with resolutions up to 1280x1024, 16 million colours
- IDE: Editor/Macro Assembler for building kernel and applications
- TCP/IP stack with Loopback, PPP & Ethernet drivers
- Network applications include ftp/http/mp3/smtp servers,
- irc, http, nntp and tftp clients
- Free-form, skinnable application windows
- Hard real-time data fetch
- Fits uncompressed on a single floppy
Otra alternativa que propongo es que en vez de seguir con POSIX creemos nuestra propia interfaz (tal como Windows) y ya que estamos soportemos algun File System como FAT/32 y COFF. Lo mas interesante de esto es que construyendo un enlazador ya podriamos generar un ejecutable propio apartir de codigo compilado en Windows (VC++, gcc, etc).
Dudo muchisimo de que vayamos a desarrollar un compilador, ciertamente es la mas (sic) optima pero creo que lo mas interesante seria tener ALGO funcionando y no diseñar un nuevo Linux/Windows que nunca logremos implementar. Practicamente estas hablando de lo que queria hacer CodigoDavid con las tarjetas graficas y le dijimos que no se apurara tanto, no podemos pretender diseñar un File System propio, un compilador, un kernel y demas, al final fracasariamos estrepitosamente y no lograriamos tener nada tangible.
Realmente no opino lo mismo, como bien lo dije tiene cosas que lo harian parecer a un sistema operativo pero realmente, ring-3 protection ya viene implementado desde el procesador y por ejemplo sistemas operativos antiguos como por ejemplo DOS no poseian multitasking, multithreading y aun asi eran sistemas operativos, más que por cuestiones de funcionalidad visibles primera vista, no lo considero un sistema operativo es por cuestiones de diseño y mas de fondo que la funcionalidad tangible del programa. Pero creo que ya dejamos ese tema ahi porque seria ubicarlo mejor en otro post.Lo mismo digo, difiero totalmente, MS-DOS es apenas una capita que le deja todo el control de la PC a otros ejecutables pero bueno, lo dejamos para otro momento.
Si claro, lo del gcc era solo un ejemplo porque de hecho si se quisiera hacer algo que funcionara con codigo para mac o para as400 o cosas asi pues igualmente seria viable.
Ya les dejo a ustedes como deciden hacerlo, pues logicamente las condiciones cambian si se pretende hacer un SO ASM por ser el foro de ASM, o si se quiere hacer un SO independientemente de la tematica ppal del foro.
Ahora si ponemos a volar la imaginacion ( de manera segutramente descabellada o soñadora a extremo) se podria inicialmente utilizar el formato ejecutable de otra plataforma ( linux , windows) y hacer una especie de subsystem para soportarlo, y si todo se diseña y planea de la manera adecuada se podria continuar luego que ya este funcionando, con la creacion del 'subsystem' propio del sistema e implementar los demas subsystems con llamdados al subsystem nativo. tal como lo hace windows, eternal me corregira sino es posible de ese modo.
El sistema en el cual estoy(o estasba) participando en la U, lo habiamos comtenplado para hacer lo usando otro ejecutable y a futuro crear un formato ejecutable y un conjunto de lladmas propio tal como se los he propuesto.
Hola, es mi primer post y soy algo novato en asm, estoy trabajando en este proyecto y lo que no logro comprender bien es como escribir en el diskette, entiendo lo del sector 0, y cargar en memoria 7C00, pero me he encontrado con que aparentemente hay que escribir ceros y unos, o un .bin, en realidad no comprendo como, vi el ejemplo aki mostrado (el de BOB) pero lo que necesito saber es como funciona el COPYBOOT.EXE, y tengo la misma duda de otro colega que preguntaba por los parametros, gracias a quien lea esto!La cuestion es escribir en el primer sector porque la BIOS carga ese sector en la direccion 7C00:000 y le transfiere el control mediante un jmp, entonces ahi tiene que estar el codigo inicial.